This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] EK-TM4C123GXL:UART1中断问题

Guru**** 2460850 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/651472/ek-tm4c123gxl-uart1-interrupt-problem

器件型号:EK-TM4C123GXL
这是我的 UART 代码。 当我更改 uart1中断时、它不起作用。 但 uart0会出现问题。 我的错在哪里? 
谢谢


#include #include include "inc/hw_ints.h" #include "inc/hw_memmap.h" #include "driverlib/debug.h" #include "driverlib/fpu.h" #include "driverlib/gpio.h" #include "driverlib/interrupt.h" #include "driverlib/pin_map.h" #include "driverlib.utils/idio.ide"#include "driverlib.idio.ide"#include "#drievidio.idio.ide"#include "u.ide"#include "u.idio.ide"#include "u.idio.ide"#.ide"#include "u.u.ide"#include "u.u.u.u.ide"# ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA); ROM_SysCtlPeripheralEnable (SYSCTL_Periph_UART0); ROM_GPIOPinConfigure (GPIO_PA0_U0RX); ROM_GPIOPinConfigure (GPIO_PA1_U0TX); ROM_GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1); UARTClockSourceSet (UART0_BASE、UART_CLOCK_PIOSC); UARTStdioConfig (0、115200、16000000); } void ConfigureUART1 (void) { SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB); SysCtlPeripheralEnable (SYSCTL_Periph_UART1); GPIOPINConfigure (GPIO_PB0_U1RX);GPIOPINPT1_UTOP1TB (GPIOPINTPUT1_UART1);GPIOPINTPINTPUT_UTO_UTPUT1 (GPIOPINTPUT_UT1) GPIO_PIN_0 | GPIO_PIN_1); UARTClockSourceSet (UART1_BASE、UART_CLOCK_PIOSC); UARTConfigSetExpClk (UART1_BASE、16000000、115200、(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE)); UARTEnable (UART1_BASE); } //********* // // UART 中断处理程序。 //// ***************** 空 UARTIntHandler (空) { 无符号长整型 ulStatus; //获取中断状态。 ulStatus = ROM_UARTIntStatus (UART1_BASE、TRUE); //清除已发出的中断。 ROM_UARTIntClear (UART1_base、ulStatus); //在接收 FIFO 中有字符时循环。 while (ROM_UARTCharsAvail (UART1_base)){ //从 UART 读取下一个字符并将其写回 UART。 ROM_UARTCharPutNonBlocking (UART1_base、ROM_UARTCharGetNonBlocking (UART1_base)); } GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_2、GPIO_PIN_2); SysCtlDelay (SysCtlClockGet ()/(1000 * 3)); GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_2、0); } // // //向 UART 发送字符串。 //// ***************** void UART0Send (const uint8_t * pui8Buffer、uint32_t ui32Count) { while (ui32Count---) { ROM_UARTCharPutNonBlocking (UART0_BASE、* pui8Buffer++); } } 空 UART1发送(const uint8_t * pui8Buffer、uint32_t ui32Count) { while (ui32Count---) { ROM_UARTCharPutNonBlocking (UART1_base、* pui8Buffer++); } } //********* // //此示例演示了如何将一串数据发送到 UART。 //// ***************** int main (void) { ROM_FPUEnable(); ROM_FPULazyStackingEnable(); ROM_SysCtlClockSet (SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHz); ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF); //为 LED 启用 GPIO 引脚(PF2)。 ROM_GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、GPIO_PIN_2); ConfigureUART0(); ConfigureUART1 (); ROM_IntMasterEnable(); ROM_IntEnable (INT_UART1); ROM_UARTIntEnable (UART1_base、UART_INT_RX | UART_INT_RT); //提示输入文本。 UART0Send ((uint8_t *)"\033[2JEnter 文本:"、16); UART1Send ((uint8_t *)"UART1\n"7); //UART2Send (((uint8_t *)"UART2\n"r、 7); while (1) { } }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您是否知道只有"UART_0"通过 ICDI MCU 从"123 LPAD"发出?    (将 MCU 的 UART CMOS 信号电平转换为 USB 兼容信号电平。)

    UART_1 (以及所有其他)不存在"信号电平转换"-这(可能)解释了您的报告"不起作用"。    除非您"破解您的板"-您无法"利用"ICDI MCU -管理(必需) UART_1 <-> USB 通信通道。    

    "不起作用"未能充分描述您失败的"什么、哪里和如何"-所有这些事实对您的帮助有用...   例如-我们不知道您针对 UART 通信使用哪种类型的器件。     您可以在另一个"UART-type"器件之间进行通信-只要每个器件之间的信号电平正确-并且电缆长度较短。   (米或更小)

    此类" UART 终端类型"通信的"常见问题"是"PC"、而现代通信则只会说 USB、这需要一个"UART/CMOS 电平到 USB 转换器"才能启用此类通信...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的回复。 我想我忘记了写。 我使用 TTL 转换器。 因此、当我使用 uart1时、我 通过 TTL 转换器将 PC 连接到电路板。  我已经 在串行端口监视器上看到了串行消息。 但中断不起作用

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    @错过了"转换器使用"-由于这是"常见原因"、我只需简单地看一下您的中断处理程序。 半夜在这里(美国中西部)-我会在(完全)意识到的时候回来的 (稍后)。

    "睡眠"证明"评分过高"-以下是我对成功所需的"最佳猜测"...

    我们的首选 是避免"注册"此类中断 (过于复杂且容易出错)-而 是在"启动文件"中输入这些中断 -下面是我 的详细示例

    您是否已将"启动文件"修改为"将 UART1的"默认处理程序"更改为"UARTIntHandler?"     假设您已成功使用 UART0 -并在那里成功中断-您必须已将 UART0的"默认处理程序"替换为"UARTIntHandler"-这不是真的吗?   BTW -我认为您的处理程序名称"太模糊"-添加目标 UART (UART1)更有意义-这是不是吗?

    您必须在启动文件中创建两个唯一的条目:一个带有"外部声明"(如图所示)、一个带有"矢量表"(如图所示)。

    请注意使用粗体颜色-要将每个中断的分配"驱动回家"...

    //
    //
    //应用程序使用的中断处理程序的外部声明。
    //
    //
    extern void IntDefaultHandler (void);
    extern void ADC0IntHandler (void);           //正常 PGM 操作。
    extern void ADC0SS0Handler (void);         // ADC 完整性/连接测试
    extern void GPIOBIntHandler (void);          //霍尔感应
    extern void CANIntHandler (void);
    extern void FaultISR (void);
    extern void NmiSR (void);
    extern void PWM0IntHandler (void);          // PWM 发生器
    extern void QEIIntHandler (void);
    extern void SysTickIntHandler (void);        //开关,SPD 电位计
    extern void WTimer0AIntHandler (void);   //集成 SAT (4秒)
    extern void WTimer2BIntHandler (void);   //失速检测(2秒)
    extern void Timer1BIntHandler (void);      //德500US
    extern void Timer3AIntHandler (void);      //程序时基
    extern void WatchdogIntHandler (void);

    然后(在启动文件的"矢量表"中、在下面 w/s)

    WatchdogIntHandler、     //看门狗计时器
    IntDefaultHandler、        // Timer 0子计时器 A
    IntDefaultHandler、       // Timer 0子计时器 B
    IntDefaultHandler、       //计时器1子计时器 A
    Timer1BIntHandler、      //计时器1子计时器 B
    IntDefaultHandler、       //计时器2子计时器 A
    IntDefaultHandler、       //计时器2子计时器 B
    IntDefaultHandler、       // GPIO 端口 H
    IntDefaultHandler、      // UART2 Rx 和 Tx
    IntDefaultHandler、      // SSI1 Rx 和 Tx
    Timer3AIntHandler、   //计时器3子计时器 A
    IntDefaultHandler、      //计时器3子计时器 B

    WTimer0AIntHandler、       //宽定时器0子定时器 A
    IntDefaultHandler、           //宽定时器0子定时器 B
    IntDefaultHandler、           //宽定时器1子定时器 A
    IntDefaultHandler、           //宽定时器1子定时器 B
    IntDefaultHandler、           //宽定时器2子定时器 A
    WTimer2BIntHandler、       //宽定时器2子定时器 B

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的。 问题得到解决。 非常感谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    非常感谢您以及我的朋友。     再次-强烈建议您不要使用"注册中断"-这种方法(如上所示、POST)"在启动文件中嵌入"证明对 SRAM 资源的处理更快、更简单、更不费力-这种方法应始终保持...

    祝您有机会、我是 AMI……