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.

[参考译文] TM4C123GH6PM:未触发 SPI 接收中断

Guru**** 2522140 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1331274/tm4c123gh6pm-spi-receive-interrupt-is-not-getting-triggered

器件型号:TM4C123GH6PM

#include "tm4c123xx.h"
#包含
unsigned char DTA;
void init_config (void)
{
//时钟配置
SYSCTL_RCGCUART_R |=(1 << 0);//UART0端口时钟
SYSCTL_RCGCSSI_R |=(1 << 0);// SPI 模块0时钟
SYSCTL_RCGCGPIO_R |=(1 << 0);//时钟用于端口

//UART0配置
UART0_CTL_R &=(~(1 << 0))和(~(1 << 8))和(~(1 << 9)));//UART0在配置前禁用
UART0_IBRD_R = 104;//波特率交互器部分
UART0_FBRD_R = 11;//波特率小数部分
UART0_LCRH_R |=(0x3 << 5);//字长- 8位
UART0_CC_R = 0x05;//选择 POSC
UART0_CTL_R |=(1 << 0)|(1 << 8)|(1 << 9);//0-UART 启用、8 -发送启用、9 -接收启用

//config PA0、PA1
GPIO_PORTA_AFSEL_R |=(1 << 0)|(1 << 1);//选择替代功能
GPIO_PORTA_PCTL_R |=(1 << 0)|(1 << 4);//选择 UART 功能
GPIO_PORTA_DEN_R |=(1 << 0)|(1 << 1);//DIITIALIZING PA0、PA1

//PA2、PA3、PA4、PA5配置
GPIO_PORTA_AFSEL_R |=(1<< 2)|(1<< 3)|(1<< 4)|(1<< 5);
GPIO_PORTA_PCTL_R |= 0x00222200;
GPIO_PORTA_DEN_R |=(1 << 2)|(1 << 3)|(1 << 4)|(1 << 5);

//SSI0 config =CPOL=1、CPOL=1
SSI0_CR1_R &=(~(1<< 1));
SSI0_CR1_R |=(1 << 2);//从模式
SSI0_CC_R = 0x0;//选择系统时钟
SSI0_CPSR_R = 128;//数据表- 1Mbps
SSI0_CR0_R = 0xC7;//将数据大小选择为8位,将帧选择为自由缩放帧,将 SPO 和 SPH 选择为0,将 SCR 选择为0
SSI0_CR1_R |=(1 << 1);//启用 SPI 模块


void SPI_Receive (void)
{
while (((SSI0_SR_R >> 3)和0x1)= 0);
DTA = SSI0_DR_R;


void my_Int_config (void)
{
NVIC_en0_R =(1<<7);//spi0中断
NVIC_PRI1_R =(3<<28);//最高优先级
SSI0_IM_R =(1<<2);//spi0 Rx 中断


void IntDefaultHandler (void) //此函数(启动代码)
{
if (((SSI0_MIS_R>>2)&1)
DTA = SPI_RECEIVE ();
//中断无需清除,因为它是自动清除的


int main()
{
init_config();
my_Int_config();
while (1)
{
/*在 UART 中显示*/
while (((UART0_FR_R 和(1 << 5)))!= 0);
UART0_DR_R = DTA;



上述代码是从 SPI 主器件(TM4C123配置为主器件)到 SPI 从器件(TM4C123配置为从器件)的板对板通信。 我持续从主器件侧发送'A'。 我使用逻辑分析仪检查了输出。 从从器件侧、我应该在 MISO (从器件 RX 引脚)中获得的信息、我从 MOSI (从器件 Tx 引脚)获得它。 我对该怎么做感到很困惑。 主器件正在发送'A'。 为什么从器件会将其发回? MISO 线路在从器件和主器件中始终为高电平、在从器件和主器件中始终为相同输出。 如果没有中断方法、我会得到垃圾数据以及我发送的信息、有时单独发生这种情况。 这就是我执行中断的原因。 自上周以来、我一直在尝试这种方法、但未获得任何适当的输出。 我仔细检查了 B2B 和逻辑分析仪的引脚连接。 下面是从侧输出。 请在这方面提供任何帮助。

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

    您好!

     抱歉、我目前正在旅行。 我将在下星期一回复您。  

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

    好的,先生

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

    您好!

     首先、不使用 TivaWare SDK 的原因有很强。 TivaWare SDK 提供了外设驱动程序、可帮助您简化应用开发。 您完全在 DRM (直接存储器存取)编写代码、而代码往往会出错。 请参阅此 FQQ 链接 https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/695568/faq-faqs-for-tm4c-arm-cortex-m4f-microcontrollers 中的常见问题#4。 我们不建议使用 DRM 风格的编码。  

    [quote userid="596474" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1331274/tm4c123gh6pm-spi-receive-interrupt-is-not-getting-triggered 通过从端、我应该在 MISO (从器件 RX 引脚)中得到的信息、我是从 MOSI (从器件 Tx 引脚)获得的。 我对该怎么做感到很困惑。 主器件正在发送'A'。

    您是否正在将 PA4探测为 RX 引脚? 确保您没有在板上交换 TX 和 RX。 如果您将 SSI0用于主板、主板将在 PA5上进行传输。 另一个板上的从器件将在 PA4上接收数据。  

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

    先生,
     我不知道该怎么说,可是我完全错了。 原因是接收器还在发送数据。 它应该不接收先生。! 交换后得到了输出、但如果直接将它们连接到直通路、则无法获得输出。 这是我没有得到的。

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

    SPI 为全双工。 如果从 SPI 正在从主器件接收时钟、则它将从主器件接收数据、同时也发送数据。 从器件本身不可能在没有接收 SPICLK 的情况下发送数据。

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

    先生,
     我明白、但如何解决此问题。我通过在 MOSI 和 MISO 之间连接交叉连接、实现了板对板的通信? 我需要直接连接它、不对。 对我有什么建议吗?

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

    您可以将 TX (PA5)从主器件连接到从器件的 RX (PA4)、反之亦然。