📄 iote.c
字号:
#include "io.h"
#include "DSP240x_Device.h"
//IN & OUT Status
unsigned int IN_Status[IN_PIN_NUM];
unsigned int OUT_Status[OUT_PIN_NUM];
//IN Reg
volatile unsigned int * IN_MCR[IN_PIN_NUM];
volatile unsigned int * IN_DATDIR[IN_PIN_NUM];
unsigned int IO_INx_ENA[IN_PIN_NUM];
unsigned int IO_INx_INPUT[IN_PIN_NUM];
unsigned int IO_INx_HIGH[IN_PIN_NUM];
//OUT Reg
volatile unsigned int * OUT_MCR[OUT_PIN_NUM];
volatile unsigned int * OUT_DATDIR[OUT_PIN_NUM];
unsigned int IO_OUTx_ENA[OUT_PIN_NUM];
unsigned int IO_OUTx_OUTPUT[OUT_PIN_NUM];
unsigned int IO_OUTx_HIGH[OUT_PIN_NUM];
void IO_Init()
{
unsigned int TEMPREG,i;
IN_MCR[0] = Val_MCRB; //IN腿复用控制寄存器
IN_MCR[1] = Val_MCRB;
IN_MCR[2] = Val_MCRB;
IN_MCR[3] = Val_MCRB;
IN_MCR[4] = Val_MCRA;
IN_MCR[5] = Val_MCRB;
IN_MCR[6] = Val_MCRA;
IN_MCR[7] = Val_MCRA;
IN_DATDIR[0] = Val_PCDATDIR; //IN腿方向与数据控制寄存器
IN_DATDIR[1] = Val_PCDATDIR;
IN_DATDIR[2] = Val_PCDATDIR;
IN_DATDIR[3] = Val_PCDATDIR;
IN_DATDIR[4] = Val_PADATDIR;
IN_DATDIR[5] = Val_PCDATDIR;
IN_DATDIR[6] = Val_PBDATDIR;
IN_DATDIR[7] = Val_PBDATDIR;
OUT_MCR[0] = Val_MCRC; //OUT腿复用控制寄存器
OUT_MCR[1] = Val_MCRB;
OUT_MCR[2] = Val_MCRC;
OUT_MCR[3] = Val_MCRC;
OUT_MCR[4] = Val_MCRC;
OUT_MCR[5] = Val_MCRC;
OUT_MCR[6] = Val_MCRC;
OUT_MCR[7] = Val_MCRC;
OUT_DATDIR[0] = Val_PFDATDIR; //OUT腿方向与数据控制寄存器
OUT_DATDIR[1] = Val_PDDATDIR;
OUT_DATDIR[2] = Val_PEDATDIR;
OUT_DATDIR[3] = Val_PFDATDIR;
OUT_DATDIR[4] = Val_PFDATDIR;
OUT_DATDIR[5] = Val_PFDATDIR;
OUT_DATDIR[6] = Val_PEDATDIR;
OUT_DATDIR[7] = Val_PFDATDIR;
IO_INx_ENA[0] = ~IOPC5_ENABLE; //配置管腿为通用功能,temp &= X
IO_INx_ENA[1] = ~IOPC4_ENABLE;
IO_INx_ENA[2] = ~IOPC3_ENABLE;
IO_INx_ENA[3] = ~IOPC2_ENABLE;
IO_INx_ENA[4] = ~IOPA5_ENABLE;
IO_INx_ENA[5] = ~IOPC1_ENABLE;
IO_INx_ENA[6] = ~IOPB7_ENABLE;
IO_INx_ENA[7] = ~IOPB6_ENABLE;
IO_INx_INPUT[0] = ~IOC5OUT; //在配置管腿为通用功能后,再为输入功能 temp &= X
IO_INx_INPUT[1] = ~IOC4OUT;
IO_INx_INPUT[2] = ~IOC3OUT;
IO_INx_INPUT[3] = ~IOC2OUT;
IO_INx_INPUT[4] = ~IOA5OUT;
IO_INx_INPUT[5] = ~IOC1OUT;
IO_INx_INPUT[6] = ~IOB7OUT;
IO_INx_INPUT[7] = ~IOB6OUT;
IO_INx_HIGH[0] = IOC5_HIGH; //IN腿输入为高时的值,用来和读出的值比较 temp &= X
IO_INx_HIGH[1] = IOC4_HIGH;
IO_INx_HIGH[2] = IOC3_HIGH;
IO_INx_HIGH[3] = IOC2_HIGH;
IO_INx_HIGH[4] = IOA5_HIGH;
IO_INx_HIGH[5] = IOC1_HIGH;
IO_INx_HIGH[6] = IOB7_HIGH;
IO_INx_HIGH[7] = IOB6_HIGH;
IO_OUTx_ENA[0] = ~IOPF0_ENABLE; //配置管腿为通用功能,temp &= X
IO_OUTx_ENA[1] = ~IOPD0_ENABLE;
IO_OUTx_ENA[2] = ~IOPE5_ENABLE;
IO_OUTx_ENA[3] = ~IOPF3_ENABLE;
IO_OUTx_ENA[4] = ~IOPF5_ENABLE;
IO_OUTx_ENA[5] = ~IOPF4_ENABLE;
IO_OUTx_ENA[6] = ~IOPE6_ENABLE;
IO_OUTx_ENA[7] = ~IOPF1_ENABLE;
IO_OUTx_OUTPUT[0] = IOF0OUT; //在配置管腿为通用功能后,再为输出功能temp |= X
IO_OUTx_OUTPUT[1] = IOD0OUT;
IO_OUTx_OUTPUT[2] = IOE5OUT;
IO_OUTx_OUTPUT[3] = IOF3OUT;
IO_OUTx_OUTPUT[4] = IOF5OUT;
IO_OUTx_OUTPUT[5] = IOF4OUT;
IO_OUTx_OUTPUT[6] = IOE6OUT;
IO_OUTx_OUTPUT[7] = IOF1OUT;
IO_OUTx_HIGH[0] = IOF0_HIGH; //OUT腿输出为高时的值,temp |= X
IO_OUTx_HIGH[1] = IOD0_HIGH;
IO_OUTx_HIGH[2] = IOE5_HIGH;
IO_OUTx_HIGH[3] = IOF3_HIGH;
IO_OUTx_HIGH[4] = IOF5_HIGH;
IO_OUTx_HIGH[5] = IOF4_HIGH;
IO_OUTx_HIGH[6] = IOE6_HIGH;
IO_OUTx_HIGH[7] = IOF1_HIGH;
for(i=0;i<IN_PIN_NUM;i++)
{
IN_Status[i]=0;
}
for(i=0;i<IN_PIN_NUM;i++)
{
OUT_Status[i]=0;
}
for(i=0;i<IN_PIN_NUM;i++) //输入腿配置
{
TEMPREG = *IN_MCR[i];
TEMPREG &= IO_INx_ENA[i];
*IN_MCR[i] = TEMPREG;
TEMPREG = *IN_DATDIR[i];
TEMPREG &= IO_INx_INPUT[i];
*IN_DATDIR[i] = TEMPREG;
}
for(i=0;i<OUT_PIN_NUM;i++) //输出腿配置
{
TEMPREG = *OUT_MCR[i]; //设置为普通功能
TEMPREG &= IO_OUTx_ENA[i];
*OUT_MCR[i] = TEMPREG;
TEMPREG = *OUT_DATDIR[i];
TEMPREG |= IO_OUTx_OUTPUT[i];
*OUT_DATDIR[i] = TEMPREG;
OUT_Status_Set(i,OUT_LOW);
}
}
unsigned int IN_Status_Load(unsigned int IN_Num)
{
unsigned int TEMPREG=0;
TEMPREG = *IN_DATDIR[IN_Num];
TEMPREG &= IO_INx_HIGH[IN_Num];
if (TEMPREG >0)
return 1;
else
return 0;
}
unsigned int OUT_Status_Load(unsigned int IN_Num)
{
unsigned int TEMPREG=0;
TEMPREG = *OUT_DATDIR[IN_Num];
TEMPREG &= IO_OUTx_HIGH[IN_Num];
if (TEMPREG >0)
return 1;
else
return 0;
}
void OUT_Status_Set(unsigned int OUT_Num,unsigned int High_Low)
{
unsigned int TEMPREG;
TEMPREG = *OUT_DATDIR[OUT_Num];
if(High_Low)
TEMPREG |=IO_OUTx_HIGH[OUT_Num];
else
TEMPREG &= (~IO_OUTx_HIGH[OUT_Num]);
*OUT_DATDIR[OUT_Num]= TEMPREG;
OUT_Status[OUT_Num] = High_Low;
}
void IN_Self_Test(void)
{
unsigned int i;
for(i=0;i<IN_PIN_NUM;i++)
{
IN_Status[i]=IN_Status_Load(i);
}
for(i=0;i<OUT_PIN_NUM;i++)
{
OUT_Status[i] = OUT_Status_Load(i);
}
}
void test()
{
unsigned int i,j;
for (i=0;i<10;i++)
{
wait_second(1);
for(j=0;j<OUT_PIN_NUM;j++)
{
OUT_Status_Set(j,OUT_HIGH);
}
wait_second(3);
for(j=0;j<OUT_PIN_NUM;j++)
{
OUT_Status_Set(j,OUT_LOW);
}
IN_Self_Test();
}
port000c =15;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -