本帖最后由 skylinehbu 于 2013-10-29 18:43 编辑
GPIO0~GPIO3对应四个led,单步运行时led正常闪烁,但全速运行后不正常,只有两个led闪烁。这是怎么回事?
并且调试时发现,执行完initSysCtrl后GPADAT寄存器值发生改变,
执行MyInitGpio中的语句GpioDataRegs.GPADAT.all |= 0x0000000f后不变,这是怎么回事?非常感谢!!
代码如下:
/*
* main.c
*/
#include<F2802x_Device.h>
#include<DSP28x_Project.h>
void MyInitGpio(void)
{
EALLOW;
GpioCtrlRegs.GPAPUD.all &= ~0x0000000f;
GpioCtrlRegs.GPAMUX1.all &= ~0x000000ff;//bit:0/1 确定gpio0功能。。。
GpioDataRegs.GPASET.all |= 0x0000000f;//确定改变方向的时候的初始状态
GpioCtrlRegs.GPADIR.all |= 0x0000000f;
GpioCtrlRegs.GPADIR.bit.GPIO0 = 1;
GpioCtrlRegs.GPADIR.bit.GPIO1 = 1;
GpioCtrlRegs.GPADIR.bit.GPIO2 = 1;
GpioCtrlRegs.GPADIR.bit.GPIO3 = 1;
EDIS;
}
void main(void)
{
InitSysCtrl(); //系统控制初始化
MyInitGpio();
DINT; //禁止全局中断
InitPieCtrl();
IER = 0x0000; //禁止CPU中断
IFR = 0x0000; //清楚CPU所有中断标志
InitPieVectTable();//位向量表中的所有中断向量配置对应的入口地址
for(;;)
{
GpioDataRegs.GPADAT.bit.GPIO0 = 0;
GpioDataRegs.GPADAT.bit.GPIO1 = 0;
GpioDataRegs.GPADAT.bit.GPIO2 = 0;
GpioDataRegs.GPADAT.bit.GPIO3 = 0;
DELAY_US(100000L);
GpioDataRegs.GPADAT.bit.GPIO0 = 1;
GpioDataRegs.GPADAT.bit.GPIO1 = 1;
GpioDataRegs.GPADAT.bit.GPIO2 = 1;
GpioDataRegs.GPADAT.bit.GPIO3 = 1;
DELAY_US(100000L);
}
}
|