主题中讨论的其他器件: SysConfig
工具与软件:
您好!
我想使用德州 MSPM0G1106 IC 进行 SPI 读取和写入。
首先、我之前已经完成了使用另一个 MCU 的 SPI 读取和写入。 这是代码。
unsigned char MFRC522_SPIreceive(unsigned char address_rcv) { SPI_receive_address= (((address_rcv<<1)&0x7E) | 0x80); SPI_NSS= 0; SPI_WRITE_TX(SPI0, SPI_receive_address); while(SPI_IS_BUSY(SPI0)); SPI_ClearRxFIFO(SPI0); SPI_WRITE_TX(SPI0, DUMMY); while(SPI_IS_BUSY(SPI0)); SPI_Received_data = SPI_READ_RX(SPI0); SPI_NSS= 1; return SPI_Received_data; }
在查看 MCU 的调试时、我可以看到想要的值。 但当我查看 TExaS 的调试时、我读取了0xFF。 通常我应该读取0x3F。
(在下图中、您可以看到从 Logic Analayzer 中拍摄的图像)。
SPI 初始化
SPI 设置
SPI 设置
SYSCONFIG_WEAK void SYSCFG_DL_SPI_0_init(void) { DL_SPI_setClockConfig(SPI_0_INST, (DL_SPI_ClockConfig *) &gSPI_0_clockConfig); DL_SPI_init(SPI_0_INST, (DL_SPI_Config *) &gSPI_0_config); /* Configure Controller mode */ /* * Set the bit rate clock divider to generate the serial output clock * outputBitRate = (spiInputClock) / ((1 + SCR) * 2) * 400000 = (16000000)/((1 + 19) * 2) */ DL_SPI_setBitRateSerialClockDivider(SPI_0_INST, 19); /* Set RX and TX FIFO threshold levels */ DL_SPI_setFIFOThreshold(SPI_0_INST, DL_SPI_RX_FIFO_LEVEL_1_2_FULL, DL_SPI_TX_FIFO_LEVEL_1_2_EMPTY); /* Enable module */ DL_SPI_enable(SPI_0_INST); }
SPI 初始化代码
IC 引脚
配置等设置与图片中的设置相同。
我使用的代码如下所示。
unsigned char MFRC522_SPIreceive(uint8_t address_rcv) { uint8_t SPI_receive_address = (((address_rcv << 1) & 0x7E) | 0x80); //MFRC_NSS_OFF; DL_SPI_transmitData8(SPI_0_INST, SPI_receive_address); delay_cycles(500); while (DL_SPI_isBusy(SPI_0_INST)); DL_SPI_transmitData8(SPI_0_INST, DUMMY); delay_cycles(500); while (DL_SPI_isBusy(SPI_0_INST)); SPI_Received_data= DL_SPI_receiveData8(SPI_0_INST); //MFRC_NSS_ON; return SPI_Received_data; }
主代码
MFRC522_SPIreceive(0x11); delay_cycles(500);
我在读取代码时是否出错? 如果是、如何解决?
提前感谢您。