请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
大家好、
能否有人帮助解决 SPI 问题、我正在尝试修改示例并使用它、但它不想工作(提前进行大 tnx!)。
#include "driverlib.h" #include "Board.h" uint16_t i; uint8_t RXData = 0、TXData = 0; uint8_t check = 0; // XT1初始化所需的超时 #define CS_XT1_TIMEOUT 50000 // XT2初始化所需的超时** #define CS_XT2_TIMEOUT 0 //XT1晶振频率 被使用#define CS_XT1_CRYSTICL_FREQUENCY 32768 //可用于存储返回的 STATUS_SUCCESS 或 STATUS_FAIL uint8_t 返回值= 0; //可变/可变到 INT32 主时钟值(void) //停止看门狗计时器 WDT_A_HOLD (WDT_A_base); //---------------- 外部晶振--- //端口选择 XT1 GPIO_setPeripheralModuleFunctionInputPin ( GPIO_PORT_P2、 GPIO_PIN6 + GPIO_PIN7、 GPIO_secondary 模块功能 ); //---------------- 外部晶振--- //------------------ SPI --- // CS 信号 GPIO_setAsOutputPin (GPIO_PORT_P3、GPIO_PIN6); //将所有 CS 引脚设置为高电平 GPIO_setOutputHighOnPin (GPIO_PORT_P3、GPIO_PIN6); GPIO_setPeripheralModuleFunctionInputPin ( GPIO_PORT_P4、 GPIO_PIN4 + GPIO_PIN5 + GPIO_PIN6 + GPIO_PIN7、 GPIO_PRIMARY_MODULE_FUNCTION ); //------------------ SPI --- //---------------- 外部晶振--- //初始化正在使用的 XT1和 XT2晶振频率 cs_setExternalClockSource (CS_XT1_crystal_frequency); //初始化 XT1。 如果初始化成功、则返回 STATUS_SUCCESS 返回值= CS_TurnOnXT1LFWithTimeout (CS_XT1_DRIVE_0、CS_XT1_TIMEOUT); //选择 XT1作为 ACLK 源 CS_initClockSignal (CS_ACLK、CS_XT1CLK_select、CS_Clock_divider); //选择 XT1作为 SMCLK 源 CS_initClockSignal (CS_SMCLK、CS_XT1CLK_select、CS_Clock_divider); //清除所有 OSC 故障标志 CS_clearAllOscFlagsWithTimeout (1000); //启用振荡器故障中断 SFR_enableInterrupt (SFR_oscillator_FAULT_INTERRUPT); //---------------- 外部晶振--- /* *禁用 GPIO 上电默认高阻抗模式以激活 *先前配置的端口设置 * PMM_unlockLPM5 (); if (STATUS_FAIL = EUSCI_A_UART_init (EUSCI_A0_BASE、&UART_param)){ 返回; } EUSCI_A_UART_ENABLE (EUSCI_A0_BASE); EUSCI_A_UART_clearInterrupt (EUSCI_A0_BASE、EUSCI_A_UART_receive_interrupt); //启用 USCI_A0 RX 中断 EUSCI_A_UART_enableInterrupt (EUSCI_A0_BASE、EUSCI_A_UART_receive_interrupt); //------------------ SPI --- //初始化主设备 EUSCI_B_SPI_initMasterParam SPI_param ={0}; spi_param.selectClockSource = EUSCI_B_SPI_CLOCKSOURCE_SMCLK; SPI_param.clockSourceFrequency = CS_getSMCLK (); spi_param.desiredSpiClock = 1000; SPI_param.msbFirst = EUSCI_B_SPI_MSB_FIRST; SPI_param.clockPhase = EUSCI_B_SPI_PHASE_DATA_Changed_ONFIRST_capted_on_next; SPI_param.clockPolarity = EUSCI_B_SPI_CLOCKPOLARITY_INACT_HIGH; SPI_param.spiMode = EUSCI_B_SPI_4PIN_UCxSTE_ACTIVE_HIGH;//EUSCI_B_SPI_3Pin; EUSCI_B_SPI_initMaster (EUSCI_B0_BASE、&SPI_param); //启用 SPI 模块 EUSCI_B_SPI_ENABLE (EUSCI_B0_BASE); EUSCI_B_SPI_clearInterrupt (EUSCI_B0_BASE、EUSCI_B_SPI_Receive_interrupt); //启用 USCI_B0 RX 中断 EUSCI_B_SPI_enableInterrupt (EUSCI_B0_BASE、EUSCI_B_SPI_Receive_interrupt); //等待从器件初始化 _DELAY_CYCLES (100); //------------------ SPI --- //启用全局中断 _enable_interrupt (); while (1) { TXData = 0x55; //------------------ SPI ------------------ //将所有 CS 引脚置为低电平 GPIO_setOutputLowOnPin (GPIO_PORT_P3、GPIO_PIN6); //等待从器件初始化 _DELAY_CYCLES (100); //USCI_B0 TX 缓冲器准备好了吗? while (!EUSCI_B_SPI_getInterruptStatus (EUSCI_B0_BASE、 EUSCI_B_SPI_Transmit 中断); //向从器件发送数据 EUSCI_B_SPI_transmitData (EUSCI_B0_BASE、TXData); //将所有 CS 引脚设置为高电平 GPIO_setOutputHighOnPin (GPIO_PORT_P3、GPIO_PIN6); //等待从器件初始化 _DELAY_CYCLES (100); //------------------ SPI ------------------ __delay_cycles (10000); } } #if defined (__TI_Compiler_version__)|| defined (__IAR_systems_icc_) #pragma vector=USCI_B0_vector __interrupt #elif defined (__GNU__) __attribute__(interrupt (USCI_B0_vector))) #endif USCI_B0_vector ( void 开关(__evo_in_range (UCB0IV、USCI_SPI_UCTXIFG)) { USCI_SPI_UCRXIFG 案例: // UCRXIFG 中断; 默认值: 中断; } }