//#####################################################################
// 文件: Example_281xGpioToggle.c
// 说明: DSP281x 芯片GPIO 反转触发测试程序
//#####################################################################
#include "DSP281x_Device.h"
#include "DSP281x_Examples.h"
//选择被编译的例子,只有一个例子设为1,其他的设为0
#define EXAMPLE1 1
//使用DATA 寄存器触发I/O引脚
#define EXAMPLE2 0
//使用SET/CLEAR寄存器触发I/O引脚
#define EXAMPLE3 0 //使用
TOGGLE寄存器触发I/O引脚
//文件中定义的函数原型声明
void delay_loop(void);
void Gpio_select(void);
void Gpio_example1(void);
void Gpio_example2(void);
void Gpio_example3(void);
void main(void)
{
//Step
1.系统初始化系统控制:PLL、看门狗、使能外部时钟
InitSysCtrl();
//Step 2. 初始化 GPIO
//InitGpio();
//本例中采用下面的配置,跳过
Gpio_select();
//Step
3.清除所有中断,初始化PIE向量表
DINT;
//关全局中断
InitPieCtrl();
IER = 0x0000;
//关CPU级中断
IFR = 0x0000;
//清除所有CPU级中断标志位
InitPieVectTable();
//Step 4. 用户代码
#if
EXAMPLE1
//本例使用DATA 寄存器触发I/O引脚
Gpio_example1();
#endif
// - EXAMPLE1
#if
EXAMPLE2
//本例使用SET/CLEAR寄存器触发I/O引脚
Gpio_example1();
#endif
#if
EXAMPLE3
//本例使用TOGGLE寄存器触发I/O引脚
Gpio_example3();
#endif
}
void delay_loop()
{
short i;
for (i = 0; i
< 1000; i++) {}
}
void Gpio_example1(void)
{
//用DATA寄存器触发I/O引脚。注意:当使用DATA寄存器输入值可能丢失,如果在
//I/O口有输入数据,最好使用CLEAR/SET/TOGGLE寄存器代替
while(1)
{
GpioDataRegs.GPADAT.all = 0xAAAA;
GpioDataRegs.GPBDAT.all = 0xAAAA;
GpioDataRegs.GPDDAT.all = 0x0022;
GpioDataRegs.GPEDAT.all =
0x0002;
GpioDataRegs.GPFDAT.all = 0xAAAA;
GpioDataRegs.GPGDAT.all = 0x0020;
delay_loop();
GpioDataRegs.GPADAT.all = 0x5555;
GpioDataRegs.GPBDAT.all = 0x5555;
GpioDataRegs.GPDDAT.all = 0x0041;
//仅有4个I/O引脚
GpioDataRegs.GPEDAT.all = 0x0005;
//仅有3个I/O引脚
GpioDataRegs.GPFDAT.all = 0x5555;
GpioDataRegs.GPGDAT.all = 0x0010;
//仅有2个I/O引脚
delay_loop();
}
}
void Gpio_example2(void)
{
//用SET/CLEAR寄存器触发I/O引脚
while(1)
{
GpioDataRegs.GPASET.all = 0xAAAA;
GpioDataRegs.GPACLEAR.all = 0x5555;
GpioDataRegs.GPBSET.all = 0xAAAA;
GpioDataRegs.GPBCLEAR.all = 0x5555;
GpioDataRegs.GPDSET.all = 0x0022;
GpioDataRegs.GPDCLEAR.all = 0x0041;
//仅有4个I/O引脚
GpioDataRegs.GPESET.all = 0x0002;
GpioDataRegs.GPECLEAR.all = 0x0005;
//仅有3个I/O引脚
GpioDataRegs.GPFSET.all = 0xAAAA;
GpioDataRegs.GPFCLEAR.all = 0x5555;
GpioDataRegs.GPGSET.all = 0x0020;
GpioDataRegs.GPGCLEAR.all = 0x0010;
//仅有2个I/O引脚
delay_loop();
GpioDataRegs.GPACLEAR.all = 0xAAAA;
GpioDataRegs.GPASET.all = 0x5555;
GpioDataRegs.GPBCLEAR.all = 0xAAAA;
GpioDataRegs.GPBSET.all = 0x5555;
GpioDataRegs.GPDCLEAR.all = 0x0022;
GpioDataRegs.GPDSET.all = 0x0041;
//仅有4个I/O引脚
GpioDataRegs.GPECLEAR.all = 0x0002;
GpioDataRegs.GPESET.all = 0x0005;
//仅有3个I/O引脚
GpioDataRegs.GPFCLEAR.all = 0xAAAA;
GpioDataRegs.GPFSET.all = 0x5555;
GpioDataRegs.GPGCLEAR.all = 0x0020;
GpioDataRegs.GPGSET.all = 0x0010;
//仅有2个I/O引脚
delay_loop();
}
}
void Gpio_example3(void)
{
//用TOGGLE寄存器触发I/O引脚,设置引脚为已知状态
GpioDataRegs.GPASET.all
= 0xAAAA;
GpioDataRegs.GPACLEAR.all = 0x5555;
GpioDataRegs.GPBSET.all
= 0xAAAA;
GpioDataRegs.GPBCLEAR.all = 0x5555;
GpioDataRegs.GPDSET.all
= 0x0022;
GpioDataRegs.GPDCLEAR.all = 0x0041;
//仅有4个I/O引脚
GpioDataRegs.GPESET.all
= 0x0002;
GpioDataRegs.GPECLEAR.all = 0x0005;
//仅有3个I/O引脚
GpioDataRegs.GPFSET.all
= 0xAAAA;
GpioDataRegs.GPFCLEAR.all = 0x5555;
GpioDataRegs.GPGSET.all
= 0x0020;
GpioDataRegs.GPGCLEAR.all = 0x0010;
//仅有2个I/O引脚
//用TOGGLE寄存器反转引脚状态,任何位写1反转,写0不反转
while(1)
{
GpioDataRegs.GPATOGGLE.all = 0xFFFF;
GpioDataRegs.GPBTOGGLE.all = 0xFFFF;
GpioDataRegs.GPDTOGGLE.all = 0xFFFF;
GpioDataRegs.GPETOGGLE.all = 0xFFFF;
GpioDataRegs.GPFTOGGLE.all = 0xFFFF;
GpioDataRegs.GPGTOGGLE.all = 0xFFFF;
delay_loop();
}
}
void Gpio_select(void)
{
Uint16 var1;
Uint16 var2;
Uint16 var3;
var1= 0x0000;
//设置GPIO多路复用为I/O功能
var2= 0xFFFF;
//设置GPIO方向为输出
var3= 0x0000;
//设置输入采样限定值
EALLOW;
GpioMuxRegs.GPAMUX.all =
var1;
GpioMuxRegs.GPBMUX.all =
var1;
GpioMuxRegs.GPDMUX.all =
var1;
GpioMuxRegs.GPFMUX.all =
var1;
GpioMuxRegs.GPEMUX.all =
var1;
GpioMuxRegs.GPGMUX.all =
var1;
GpioMuxRegs.GPADIR.all =
var2; //GPIO 方向为输出
GpioMuxRegs.GPBDIR.all =
var2; //GPIO 方向为输出
GpioMuxRegs.GPDDIR.all =
var2;
GpioMuxRegs.GPEDIR.all =
var2;
GpioMuxRegs.GPFDIR.all =
var2;
GpioMuxRegs.GPGDIR.all =
var2;
GpioMuxRegs.GPAQUAL.all
= var3; //设置输入采样限定值
GpioMuxRegs.GPBQUAL.all
= var3;
GpioMuxRegs.GPDQUAL.all
= var3;
GpioMuxRegs.GPEQUAL.all
= var3;
EDIS;
}