Thread 中讨论的其他器件:EK-TM4C129EXL
工具/软件:TI C/C++编译器
您好 Gurus、
我正在尝试实现 UART0 RX 中断、但尚未实现。 代码编译成功、没有任何错误。 但是、我面临两个奇怪的问题、
- 直到我发送第8个字符、它才会捕获任何中断。 当它接收到第8个字符时、它为中断处理程序 ISR 提供服务并成功返回
- 它只为中断提供一次服务、无论我发送多少宪章、它都不会再次中断。
我已经在 startup_css.c 文件中注册了中断处理程序并进行了声明。
// // //应用程序使用的中断处理程序的外部声明。 //// ***************** extern void xPortPendSVHandler (void); extern void vPortSVCHandler (void); extern void xPortSysTickHandler (void); extern void UART0ISR (void); //*********
和
IntDefaultHandler、 // GPIO 端口 B IntDefaultHandler、 // GPIO 端口 C IntDefaultHandler、 // GPIO 端口 D IntDefaultHandler、 // GPIO 端口 E UART0ISR、 // UART0 Rx 和 Tx IntDefaultHandler、 // UART1 Rx 和 Tx IntDefaultHandler、 // SSI0 Rx 和 Tx IntDefaultHandler、 // I2C0主机和从机
mymain.c;
#include
#include
include "main.h"
#include "drivers/pinout.h"
#include "utils/uartstdio.h"
// TivaWare 包含
#include "driverlib/sysctl.h"
#include "driverlib/debug.h"
#include "driverlib/rom.h"
#include "driverlib/rom_map#include
"driver.h"#defintrl.ude/task#include
"#include "driverlib.h"#include "#defintrabout.udpov.h"#include "#defintrab.trab.h #include "#tes#definu.tots.h #include "#include "driverlib/void #include "driverlib_rtos"#include "#def"#def"#def"#task.ipts"#include "#def"#def"#def"#def"#ts"#def"#ts"#def"#defintrl.ipts"#include "#include "#defintrab.ipts"#include "#def"#def"#ts.ts"#include "#ts"
void LED3Task (void *pvParameters);
void LED4Task (void *pvParameters);
void SerialTask1 (void *pvParameters);
void SerialTask2 (void *pvParameters);
void UART0ISR (void);
//主函数
int main (void)
{
//将系统时钟初始化为120 MHz
uint32_t output_clock_rate_Hz;
output_clock_rate _Hz = ROM_SysCtlClockFreqSet (
(SYSCTL_XTAL_25MHz | SYSCTL_OSC_MAIN |
SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480)、
System_clock);
assert (output_clock_rate _Hz = system_clock);
//初始化 Launchpad 的 GPIO 引脚
PinoutSet (false、false);
//设置连接到虚拟 COM 端口的 UART
//UARTStdioInit(0);
//UARTStdioConfig (0、115200、system_clock);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
SysCtlPeripheralEnable (SYSCTL_Periph_UART0);
GPIOPinConfigure (GPIO_PA0_U0RX);
GPIOPinConfigure (GPIO_PA1_U0TX);
GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1);
//UARTConfigSetExpClk (UART0_BASE、OUTPUT_CLOCK_RATE、115200、(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE));
UARTIntEnable (UART0_BASE、UART_INT_RX);//仅启用 RX 中断
//IntRegister (INT_UART0、UART0ISR);
IntEnable (INT_UART0);//启用 UART 中断
IntMasterEnable();//启用处理器中断
UARTStdioConfig (0、115200、system_clock);
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//创建演示任务
xTaskCreate (LED1Task、(const portCHAR *)"LED1"、
configMINIMAL_STACK_SIZE、NULL、1、NULL);
//xTaskCreate (demLED2Task、(const portCHAR *)"LED2"、
//configMINIMAL_STACK_SIZE、NULL、1、NULL);
xTaskCreate (LED3Task、(const portCHAR *)"LED3"、
configMINIMAL_STACK_SIZE、NULL、1、NULL);
//xTaskCreate (LED4Task、(const portCHAR *)"LED4"、
//configMINIMAL_STACK_SIZE、NULL、1、NULL);
xTaskCreate (SerialTask1、(const portCHAR *)"SerialTask1"、
configMINIMAL_STACK_SIZE、NULL、1、NULL);
xTaskCreate (SerialTask2、(const portCHAR *)"SerialTask2"、
configMINIMAL_STACK_SIZE、NULL、1、NULL);
vTaskStartScheduler();
///调度程序永远不应到达此处///
while (1)
{
//UARTprintf ("调度程序错误!!\n\n"\});
GPIOPinWrite (CLP_D1_PORT、CLP_D1_PIN、CLP_D1_PIN);
GPIOPinWrite (CLP_D2_PORT、CLP_D2_PIN、CLP_D2_PIN);
GPIOPinWrite (CLP_D3_PORT、CLP_D3_PIN、CLP_D3_PIN);
GPIOPinWrite (CLP_D4_PORT、CLP_D4_PIN、CLP_D4_PIN);
返回0;
}
}
和 UART0处理程序定义;
空 UART0ISR (空)
{
UARTIntClear (UART0_BASE、UART_INT_RX);
UARTprintf ("UART0ISR 被调用..!\n\n");
}
我卡住了、无法识别问题。
任何帮助/提示都是值得注意的。
谢谢大家。