TI论坛
直播中

代攀

7年用户 223经验值
私信 关注
[问答]

请问下面程序有什么问题UART0一直进不了中断

求大家帮忙看看  实在找不出错了,代码是教程实验中的代码,如下
#include
#include
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "inc/hw_ints.h"
#include "driverlib/gpio.h"
//#define PART_TM4C123GH6PM
#include "driverlib/pin_map.h"
#include "driverlib/sysctl.h"
#include "driverlib/uart.h"
#include "driverlib/interrupt.h"
#ifdef DEBUG
void
__error__(char *pcFilename, uint32_t ui32Line)
[
]
#endif
//*****************************************************************************
//
// Send a string to the UART.
//
//*****************************************************************************
void
UARTSend(const uint8_t *pui8Buffer, uint32_t ui32Count)
[
//
// Loop while there are more characters to send.
//
while(ui32Count--)
[
//
// Write the next character to the UART.
//
UARTCharPutNonBlocking(UART0_BASE, *pui8Buffer++);
]
]
int main(void) [

SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);//50MHz
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);//启用UART0
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);//启用GPIOA

GPIOPinConfigure(GPIO_PA0_U0RX);//GPIO管脚复用配置
GPIOPinConfigure(GPIO_PA1_U0TX);
GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);//管脚UART功能配置PA0 PA1
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);//启用GPIOF
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_2);

UARTConfigSetExpClk(UART0_BASE, SysCtlClockGet(), 115200,
(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE));
//UART时钟为系统时钟,波特率为115200,数据类型为数据位为8,停止位1,无奇偶校验位
IntMasterEnable(); //enable processor interrupts
IntEnable(INT_UART0); //enable the UART interrupt
UARtintEnable(UART0_BASE, UART_INT_RX | UART_INT_RT); //only enable RX and TX interrupts
UARTSend((uint8_t *)"Enter text: ", 10);
while (1)
[
if (UARTCharsAvail(UART0_BASE)) UARTCharPut(UART0_BASE, UARTCharGet(UART0_BASE));
]
]
void UARTIntHandler(void)
[
uint32_t ui32Status;
ui32Status = UARTIntStatus(UART0_BASE, true); //get interrupt status
UARTIntClear(UART0_BASE, ui32Status); //clear the asserted interrupts
while(UARTCharsAvail(UART0_BASE)) //loop while there are chars
[
UARTCharPutNonBlocking(UART0_BASE, UARTCharGetNonBlocking(UART0_BASE)); //echo character
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, GPIO_PIN_2); //blink LED
SysCtlDelay(SysCtlClockGet() / (1000 * 3)); //delay ~1 msec
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 0); //turn off LED
]
]

回帖(5)

苏笛笛

2018-8-16 06:29:43
楼主的工程中,启动代码中加入的UARTIntHandler函数的注册了吗?
参考一下C:tiTivaWare_C_Series-2.1.0.12573examplesboardsek-tm4c123gxluart_echo这个路径下的工程和源码。
举报

代攀

2018-8-16 06:42:50
引用: Evawang 发表于 2018-8-16 06:29
楼主的工程中,启动代码中加入的UARTIntHandler函数的注册了吗?
参考一下C:tiTivaWare_C_Series-2.1.0.12573examplesboardsek-tm4c123gxl%uart_echo这个路径下的工程和源码。

你好已经加了UARTIntHandler函数
举报

苏笛笛

2018-8-16 06:57:33
引用: bvtwerwer 发表于 2018-8-16 06:42
你好已经加了UARTIntHandler函数

楼主您的while(1)里面放那句话是做什么的?
试试屏蔽掉,然后仿真,在中断服务程序中加断点,然后在串口输入一个字节,看能不能进去。
举报

代攀

2018-8-16 07:06:44
引用: Evawang 发表于 2018-8-16 06:57
楼主您的while(1)里面放那句话是做什么的?
试试屏蔽掉,然后仿真,在中断服务程序中加断点,然后在串口输入一个字节,看能不能进去。

谢谢,按照你说得做了 ,成功进入中断。。我while(1)里面的语句是UART将接收到的数据返回去,为什么就进不了中断了?
举报

更多回帖

发帖
×
20
完善资料,
赚取积分