#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 和逻辑分析仪的引脚连接。 下面是从侧输出。 请在这方面提供任何帮助。

