利用CPU定时器0控制28335控制板上的4个led灯以二进制的形式显示0到15
时间: 2023-05-23 19:06:11 浏览: 82
A:
首先需要了解一下CPU的定时器0和28335控制板上的LED灯。
CPU的定时器0是用来进行定时操作的,可以控制一定频率的定时中断,并在中断函数中进行相应的操作。
28335控制板上的LED灯可以通过GPIO口进行控制,LED灯的亮灭状态可以通过对该GPIO口输出高低电平来实现。
因此,我们可以通过以下步骤来控制四个LED灯以二进制的形式显示0到15:
1. 设置CPU定时器0的频率为所需频率,比如1ms,以便进行定时操作。
2. 在定时中断函数中循环执行以下代码:
```
static int counter = 0;
counter++;
if(counter > 15) counter = 0;
GpioDataRegs.GPASET.bit.GPIO0 = (counter & 0x01);
GpioDataRegs.GPASET.bit.GPIO1 = ((counter >> 1) & 0x01);
GpioDataRegs.GPASET.bit.GPIO2 = ((counter >> 2) & 0x01);
GpioDataRegs.GPASET.bit.GPIO3 = ((counter >> 3) & 0x01);
```
其中,counter是一个计数器变量,用来表示需要显示的二进制数字。在每次定时中断时,将计数器加1,如果计数器超过15,就将其重置为0。
将需要显示的二进制数字的每一位与对应的LED灯相连,判断该二进制数字的每一位是否为1,如果为1,则将对应的LED灯输出高电平,否则输出低电平。例如,GPIO0对应的LED灯就控制二进制数字的最低位,因此在这里取出位运算后的最低位来判断是否需要点亮LED灯。
以上代码中,GpioDataRegs.GPASET是GPIO输出寄存器,通过设置其对应位来输出高低电平控制LED灯。
3. 在主函数中初始化CPU定时器0和GPIO口,启动定时器0。
```
InitCpuTimers();
ConfigCpuTimer(&CpuTimer0, 150, 1000); // 1ms
IntRegister(CPU_TINT0, &Timer0_ISR);
IntMasterEnable();
InitGpio();
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0;
GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0;
GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 0;
GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 0;
GpioCtrlRegs.GPADIR.bit.GPIO0 = 1;
GpioCtrlRegs.GPADIR.bit.GPIO1 = 1;
GpioCtrlRegs.GPADIR.bit.GPIO2 = 1;
GpioCtrlRegs.GPADIR.bit.GPIO3 = 1;
StartCpuTimer0();
```
在主函数中,首先初始化CPU定时器0和GPIO口,将GPIO0-3口配置为输出,并将它们的MUX寄存器设为普通GPIO,接着启动定时器0。
通过以上操作,就可以实现控制28335控制板上的4个LED灯以二进制的形式显示0到15了。