C2000LaunchPad学习记录(5)——SIC中断接收

来源:互联网 发布:通话音量增大软件 编辑:程序博客网 时间:2024/05/22 12:52

调试SCI接收中断的过程有点折腾。中断也配置了,也使能了,也定义中断响应函数了,跟踪调试时候每次中断发生,总会莫名其妙的进入到一个 asm ("      ESTOP0"); for(;;);,然后卡死在这里,百思不得其解。

琢磨了半天,才发现原来CCS5.4已经给定义了一个中断响应函数,在F2802x_DefaultIsr.c里。把自己定义的中断函数屏蔽,在CCS5.4的中断响应函数里接收数据并发送,测试OK。太后知后觉了,就在这竟然卡了这么久。


主函数main.c

/* Includes ------------------------------------------------------------------*/#include<F2802x_Device.h>#include<DSP28x_Project.h>#include "SystemInit.h"#include "SubFunction.h"/* Private typedef -----------------------------------------------------------*//* Private define ------------------------------------------------------------*//* Private macro -------------------------------------------------------------*//* Private variables ---------------------------------------------------------*//* Private function prototypes -----------------------------------------------*//* Private functions ---------------------------------------------------------*/void main(void){InitSysCtrl();// 系统控制初始化InitGpio();// GPIO 初始化PieVectTable_Configure();// 中断向量表初始化LED_Configure();// LED 引脚配置//EXTI_Configure();// 按键中断配置    SCI_Configure();// SCI 初始化while(1){LED_Blink();}}

系统初始化SystemInit.c

/* Includes ------------------------------------------------------------------*/#include<F2802x_Device.h>#include<DSP28x_Project.h>/* Private typedef -----------------------------------------------------------*//* Private define ------------------------------------------------------------*//* Private macro -------------------------------------------------------------*//* Private variables ---------------------------------------------------------*//* Private function prototypes -----------------------------------------------*//* Private functions ---------------------------------------------------------*//******************************************************************************** Function Name  : PieVectTable_Configure* Description    : 配置PIE中断向量表* Input          : None* Output         : None* Return         : None*******************************************************************************/void PieVectTable_Configure(void){DINT;InitPieCtrl();// 禁止CPU中断IER = 0x0000;// 清楚CPU所有中断标志IFR = 0x0000;// 位向量表中的所有中断向量配置对应的入口地址InitPieVectTable();EINT;}/******************************************************************************** Function Name  : LED_Configure* Description    : 配置LED对应GPIO* Input          : None* Output         : None* Return         : None*******************************************************************************/void LED_Configure(void){// 允许访问受保护的空间EALLOW;// 配置LED0、1、2、3 对应的 GPIO0、1、2、3为输出IOGpioCtrlRegs.GPADIR.all=0x000f;// 禁止访问受保护的空间EDIS;}/******************************************************************************** Function Name  : LED_Blink* Description    : LED流水灯* Input          : None* Output         : None* Return         : None*******************************************************************************/void LED_Blink(void){GpioDataRegs.GPATOGGLE.bit.GPIO0=1;  //电平翻转DELAY_US(100000L);     //延时GpioDataRegs.GPATOGGLE.bit.GPIO1=1;DELAY_US(100000L);GpioDataRegs.GPATOGGLE.bit.GPIO2=1;DELAY_US(100000L);GpioDataRegs.GPATOGGLE.bit.GPIO3=1;DELAY_US(100000L);}

SCI_Configure.c

/* Includes ------------------------------------------------------------------*/#include<F2802x_Device.h>#include<DSP28x_Project.h>/* Private typedef -----------------------------------------------------------*//* Private define ------------------------------------------------------------*/#define CBR_110             11E1#define CBR_300             3E2#define CBR_600             6E2#define CBR_1200            12E2#define CBR_2400            24E2#define CBR_4800            48E2#define CBR_9600            96E2#define CBR_14400           144E2#define CBR_19200           192E2#define CBR_38400           384E2#define CBR_56000           56E3#define CBR_57600           576E2#define CBR_115200          1152E2#define CBR_128000          128E3#define CBR_256000          256E3#define CPU_FREQ     60E6#define LSPCLK_FREQ  (CPU_FREQ/4)#define SCI_BAUD(baud) (LSPCLK_FREQ/(baud*8))-1/* Private macro -------------------------------------------------------------*//* Private variables ---------------------------------------------------------*//* Private function prototypes -----------------------------------------------*//* Private functions ---------------------------------------------------------*///static unsigned char SCI_Rx_Counter = 0;//static unsigned char SCI_Rx_Buff[20];/***************************************************************************** Function Name  : SCI_Configure* Description    : SCI 引脚和参数配置* Input          : None* Output         : None* Return         : None******************************************************************************/void SCI_Configure(void){EALLOW;// GPIO28/SCI_RX,配置成上拉输入,输入限定脉冲周期为3*2=6个时钟周期GpioCtrlRegs.GPADIR.bit.GPIO28 = 0;// 配置为输入GpioCtrlRegs.GPAPUD.bit.GPIO28 = 0;// 使能上拉GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 1;    // 配置 GPIO28 为SCI_RXGpioCtrlRegs.GPAQSEL2.bit.GPIO28 = 3;   // 限定输入脉冲为6// GPIO29/SCI_TX,配置为无上拉输出GpioCtrlRegs.GPADIR.bit.GPIO29 = 1;// 配置为输出GpioCtrlRegs.GPAPUD.bit.GPIO29 = 1;// 禁止上拉GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 1;    // 配置 GPIO29 为SCI_TXEDIS;SciaRegs.SCICTL1.bit.SWRESET = 0;// 复位SCI寄存器SciaRegs.SCICTL1.bit.SWRESET = 1;// 完成复位// 配置SCI8位数据位,1个停止位,无校验,波特率 115200SciaRegs.SCICCR.bit.STOPBITS = 0;// 0:1个停止位1:两个停止位SciaRegs.SCICCR.bit.PARITY = 0;// 0:奇校验1:偶校验SciaRegs.SCICCR.bit.PARITYENA = 0;// 0:禁止校验1:允许校验SciaRegs.SCICCR.bit.SCICHAR = 7;// 7:数据位8位SciaRegs.SCIHBAUD = 0;SciaRegs.SCILBAUD = SCI_BAUD(CBR_115200);SciaRegs.SCICTL1.bit.RXENA = 1;// 0:禁止接收1:使能接收SciaRegs.SCICTL1.bit.TXENA = 1;// 0:禁止发送1:使能发送SciaRegs.SCICTL2.bit.RXBKINTENA = 1;// 0:禁止接收中断1:允许接收中断SciaRegs.SCICTL2.bit.TXINTENA = 0;// 0:禁止发送中断1:允许发送中断PieVectTable.SCIRXINTA = &SCIRXINTA_ISR;PieCtrlRegs.PIECTRL.bit.ENPIE = 1;//使能PIEPieCtrlRegs.PIEIER9.bit.INTx1 = 1;//使能int9.1IER |= M_INT9;//使能int9ERTM;}/***************************************************************************** Function Name  : SCI_SendByte* Description    : SCI 发送一个字节* Input          : unsigned char TxByte:待发送的字节* Output         : None* Return         : None******************************************************************************/void SCI_SendByte(unsigned char TxByte){while(SciaRegs.SCICTL2.bit.TXRDY != 1);SciaRegs.SCITXBUF = TxByte;}/***************************************************************************** Function Name  : SCI_PrintfStringTest* Description    : SCI 发送一个字符串测试* Input          : None* Output         : None* Return         : None******************************************************************************/void SCI_PrintfStringTest(void){unsigned char retry = 0;char buff[] = "\nwww.ccnu.edu.cn";for(retry=0; retry!=sizeof(buff); ++retry){SCI_SendByte(buff[retry]);}}

F2802x_DefaultIsr.c里的SCI中断响应

/******************************************************************************** Function Name  : SCIRXINTA_ISR* Description    : SIC中断响应函数* Input          : None* Output         : None* Return         : None*******************************************************************************/interrupt void SCIRXINTA_ISR(void)     // SCI-A{  // Insert ISR Code hereif(SciaRegs.SCIRXST.bit.RXRDY == 1){// 把接收到的数据送往发送寄存器SciaRegs.SCITXBUF = (SciaRegs.SCIRXBUF.bit.RXDT);}  // To receive more interrupts from this PIE group, acknowledge this interruptPieCtrlRegs.PIEACK.all = PIEACK_GROUP9;}

0 0
原创粉丝点击