⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iote.c

📁 使用TI DSP 2407A 进行开发的源代码
💻 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 + -