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.

[参考译文] CCS/TM4C123GH6PM:无法通过 UART 上的中断发送数据。

Guru**** 2482225 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/723137/ccs-tm4c123gh6pm-not-able-to-transmit-data-through-interrupts-on-uart

器件型号:TM4C123GH6PM
主题中讨论的其他器件:TM4C123

工具/软件:Code Composer Studio

您好!

我正在尝试编写代码、通过 UART0发送一个字节的数据。 控制只会传输到 UART 处理程序一次、之后不会触发发送中断。 此外、当我单步执行代码时、将数据插入 UART_DR 寄存器后、数据不会反映在 UART0_DR 寄存器中。 我在此附上我的 UART.c 文件。  

typedef 结构
{
bool 为_TX_over;
uint16_t * tx_buff;
uint16_t numofbytes;
}TX_db_t;


静态 TX_db_t TX_db;

空 Uart0_Init (void)
{
uint32_t 延迟;
SYSCTL_RCGC1_R |= SYSCTL_RCGC1_UART0;
SYSCTL_RCGC2_R |= SYSCTL_RCGC2_GPIOA;
// SYSCTL_RCGCUART_R |= SYSCTL_SCGC1_UART0;
UART0_CTL_R &=~UART_CTL_UARTEN;
UART0_IBRD_R = 0x2B;
UART0_FBRD_R = 0x1A;
UART0_LCRH_R |= UART_LCRH_WLEN_8;
UART0_LCRH_R &=~UART_LCRH_Fen;
UART0_LCRH_R &=~UART_LCRH_STP2;
// UART0_IFLs_R |= UART_IFLs_TX4_8;
GPIO_PORta_AFSEL_R |= 0x03;
GPIO_Porta_DEN_R |= 0x03;
GPIO_PORta_AMSEL_R &= 0xFC;
GPIO_Porta_PCTL_R =(GPIO_Porta_PCTL_R 和0xFFFFFF00)+ 0x00000022;
// 延迟= SYSCTL_RCGC2_R;

// GPIO_PORTC_AHB_DIR_= 0x20;
UART0_CTL_R &=~UART_CTL_RXE;
UART0_IM_R &=~UART_IM_RXIM;

UART0_CTL_R &=~UART_CTL_TXE;
UART0_CTL_R |= UART_CTL_TXE;
UART0_CTL_R |= UART_CTL_EOT;
// UART0_CTL_R |= UART_CTL_UARTEN;
}


空 UART0_transmit (uint16_t * TX_buff、uint16_t buffsize)
{

tx_db.numofbytes = buffsize;
TX_db.is-TX_over = false;
TX_db.TX_buff _ptr = TX_buff;
UART0_ICR_R |= UART_ICR_TXIC | UART_ICR_RXIC;
UART0_IM_R |= UART_IM_TXIM;

UART0_DR_R =* TX_db.TX_buff;
TX_db.TX_buff PTR++;
UART0_CTL_R |= UART_CTL_UARTEN;

}


空 UART0_Handler (void)
{
if ((((UART0_MIS_R 和 UART_MIS_TXMIS)>>5)=1)
{
if (tx_db.numofbytes >0)
{
UART0_DR_R =* TX_db.TX_buff;
tx_db.numofbytes--;
TX_db.TX_buff PTR++;
}
if (tx_db.numofbytes = 1)
{
UART0_DR_R =* TX_db.TX_buff;
tx_db.numofbytes--;
UART0_CTL_R &=~UART_CTL_TXE;
UART0_IM_R &=~UART_IM_TXIM;
TX_db.is-TX_over = true;
}
UART0_ICR_R |= UART_ICR_TXIC;
}


} 

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

    我强烈建议您下载 TivaWare 库并使用该库中提供的函数连接到 UART。 您不仅会使用成熟的代码、而且会使用与 TI 提供的示例相同的方法、以及与大多数 TM4C 用户相同的方法。 然后、支持此论坛的其他用户和我们的用户将能够更好地了解您的代码并为您提供有意义的帮助。

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

    学习"为什么海报选择了这种代码方法"也会很有帮助-尤其是考虑到它"失败"成功...
    正如销售商正确且正确地指出的那样、"从畜群中砍出来"并不总是-"结束得好"。  (小心行事-过度/周围-早期"骗子"的骨头。)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Bob:
    我尝试使用直接寄存器访问模型进行编程。 我已经下载了 Tivaware、但没有基于 DRAM 模型的示例。 我以前在使用 DSP 编写基于 DRAM 模型的代码方面有经验、这就是我选择这种方法的原因。 是否仅使用软件驱动程序模型选项对 TM4C123进行编程?
    谢谢
    Nishant Sharma
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Nishant、您好!

    它不是对 TM4C 进行编程的唯一方法、但它是我们在 E2E 上支持的唯一方法。 我们的论坛指南第4点: e2e.ti.com/.../695568中对此进行了概述
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否见过 TivaWare 库用户指南第235页上的示例?
    C:\ti\TivaWare_C_Series-2.1.4.178\docs\SW-TM4C-DRL-UG-2.1.4.178.pdf