tms320f28027 中断优先级_TMS320F28027 自带串口中断收发数据例子
时间: 2023-08-05 07:10:41 浏览: 68
关于TMS320F28027中断优先级,中断优先级是通过IPC(Interrupt Priority Control)模块控制的。IPC模块包括两个寄存器:IPC0和IPC1,它们分别用于控制CPU中断和DMA中断的优先级。
IPC0中的每个位表示一个中断源,位0表示IPC0中断源的最高优先级,位31表示IPC0中断源的最低优先级。IPC1中的每个位表示一个DMA中断源,位0表示IPC1中断源的最高优先级,位31表示IPC1中断源的最低优先级。
TMS320F28027自带了多个串口,其中SCI(串行通信接口)是最常用的。下面是一个SCI中断收发数据的例子:
```
#include "F2802x_Device.h"
interrupt void sciaRxIsr(void);
interrupt void sciaTxIsr(void);
Uint16 ReceivedCount;
Uint16 TransmitCount;
char ReceivedData[16];
char TransmitData[16] = "Hello, World!\r\n";
void main(void)
{
InitSysCtrl();
InitSciaGpio();
InitScia();
InitPieCtrl();
InitPieVectTable();
EnableInterrupts();
while(1)
{
// Do nothing
}
}
void InitScia()
{
// Initialize SCI-A
SciaRegs.SCICCR.all = 0x0007;
SciaRegs.SCICTL1.all = 0x0003;
SciaRegs.SCICTL2.all = 0x0000;
SciaRegs.SCICTL2.bit.TXINTENA = 1;
SciaRegs.SCICTL2.bit.RXBKINTENA = 1;
SciaRegs.SCIHBAUD.all = 0x0000;
SciaRegs.SCILBAUD.all = 0x0027;
SciaRegs.SCICTL1.all = 0x0023;
}
void InitSciaGpio()
{
// Initialize SCI-A GPIO
EALLOW;
GpioCtrlRegs.GPAPUD.bit.GPIO28 = 0;
GpioCtrlRegs.GPAPUD.bit.GPIO29 = 0;
GpioCtrlRegs.GPAQSEL2.bit.GPIO28 = 3;
GpioCtrlRegs.GPAQSEL2.bit.GPIO29 = 3;
GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 1;
GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 1;
EDIS;
}
interrupt void sciaRxIsr(void)
{
// Receive data from SCI-A
ReceivedData[ReceivedCount++] = SciaRegs.SCIRXBUF.all;
// Echo back received data
SciaRegs.SCITXBUF.all = ReceivedData[ReceivedCount-1];
// Clear RX interrupt flag
PieCtrlRegs.PIEACK.all = PIEACK_GROUP9;
}
interrupt void sciaTxIsr(void)
{
// Transmit data through SCI-A
if(TransmitCount < sizeof(TransmitData))
{
SciaRegs.SCITXBUF.all = TransmitData[TransmitCount++];
}
else
{
SciaRegs.SCICTL2.bit.TXINTENA = 0;
}
// Clear TX interrupt flag
PieCtrlRegs.PIEACK.all = PIEACK_GROUP9;
}
```
在这个例子中,我们使用SCI-A进行串口通信。在InitScia函数中,我们初始化了SCI-A的控制寄存器和波特率寄存器。在InitSciaGpio函数中,我们将SCI-A的引脚配置为GPIO模式,并设置了输入/输出上拉器和中断模式。在main函数中,我们启用了中断,并且在一个无限循环中等待中断发生。
在sciaRxIsr中断服务程序中,我们接收了从SCI-A收到的数据,并通过SCI-A将接收到的数据回显。在sciaTxIsr中断服务程序中,我们发送了一个包含“Hello, World!”字符串的数据包,并在发送完成后禁用了TX中断。
请注意,这只是一个基本的例子,实际应用中需要根据具体情况进行修改和优化。