你(们)好。
我的 SPI 代码可与 MCP3202 (Microchip ADC)完美配合使用、但它不能与 MT25Q 和闪存配合使用。
原理图如下所示:

下面是代码:
void SPI_init(){
EALLOW;
GpioCtrlRegs.GPAMUX1.bit.GPIO8=0;// GPIO8
GpioCtrlRegs.GPADIR.bit.GPIO8=1;//方向被输出
GpioDataRegs.GPASET.bit.GPIO8 = 1;//输出= 1
GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 0;// GPIO19
GpioCtrlRegs.GPADIR.bit.GPIO19 = 1;//方向被输出
GpioDataRegs.GPASET.bit.GPIO19 = 1;//输出= 1
EDIS;
SpiaRegs.SPICCR.bit.SPISWRESET = 0;// SW 复位
SpiaRegs.SPICCR.bit.SPICHAR = 7;// 8位字
SpiaRegs.SPICCR.bit.CLKPOLARITY = 0;//上升沿
SpiaRegs.SPICCR.bit.SPILBK = 0;//禁用回路
SpiaRegs.SPISTS.ALL = 0xFF;//清除 INT 位
SpiaRegs.SPICTL.bit.MASTER_SLAVE = 1;// DSP 是主设备
SpiaRegs.SPICTL.bit.CLK_PHASE = 0;//上升沿无延迟
SpiaRegs.SPICTL.bit.TALK = 1;//启用 TX
SpiaRegs.SPICTL.bit.SPIINTENA=0;//禁用中断
SpiaRegs.SPICTL.bit.OVERRUNINTENA=0;//禁用运行时的 int
SpiaRegs.SPIBRR = 127;// LSPCLK /(SPIBRR + 1)= 120/(127 + 1)=大约1MHz
SpiaRegs.SPIFFTX.bit.SPIRST = 0;//复位 TX 和 Rx
SpiaRegs.SPIFFTX.bit.SPIFFENA=1;//启用 FIFO 增强型运算
SpiaRegs.SPIFFTX.bit.TXFIFO = 0;//将 FIFO PTR 重置为零
SpiaRegs.SPIFFTX.bit.TXFFIENA=0;//禁用 TX FIFO 中断
SpiaRegs.SPIFFRX.bit.RXFIFORESET = 0;//复位 FIFO
SpiaRegs.SPIFFRX.bit.RXFFIENA=1;//启用 RX FIFO 中断
SpiaRegs.SPICTL.bit.SPIINTENA=1;//启用生成中断
SpiaRegs.SPIFFRX.bit.RXFIFORESET = 1;//停止复位 FIFO
SpiaRegs.SPIFFCT.all = 10;// 2个字之间的10位延迟
SpiaRegs.SPIPRI.bit.FREE = 0;
SpiaRegs.SPIPRI.bit.Soft = 0;//在仿真上停止
SpiaRegs.SPIFFTX.bit.SPIRST = 1;//启用 TX 和 Rx
SpiaRegs.SPIFFTX.bit.TXFIFO = 1;//启用 FIFO 操作
SpiaRegs.SPICCR.bit.SPISWRESET = 1;//停止 SW 复位
}
int read_ps_voltage (void){
uint16 i、send[3]、recv[3]、volt;
GpioDataRegs.GPACLEAR.bit.GPIO8=1;//对于 MSP3202、CS 设置为0
SEND[0]= 0x0100;
SEND[1]= 0xA000;
SEND[2]= 0x0000;
对于(i = 0;i < 3;i++){
SpiaRegs.SPITXBUF =发送[i];
while (SpiaRegs.SPIFFRX.bit.RXFFST!= 1);
recv[i]= SpiaRegs.SPIRXBUF;
}
VOLT =(recv[1]<< 8)& 0x0F00;
伏特=伏特| recv[2];
GpioDataRegs.GPASET.bit.GPIO8=1;//对于 MSP3202、CS 设置为1
返回电压;
}
int read_flash_id (){
uint16 i、send[2]、recv[2];
GpioDataRegs.GPACLEAR.bit.GPIO19 = 1;//对于 MT25Q、CS 设置为0
SEND[0]= 0x9E00;
SEND[1]= 0x0000;
对于(i = 0;i < 2;i++){
SpiaRegs.SPITXBUF =发送[i];
while (SpiaRegs.SPIFFRX.bit.RXFFST!= 1);
recv[i]= SpiaRegs.SPIRXBUF;
}
GpioDataRegs.GPASET.bit.GPIO19 = 1;//对于 MT25Q、CS 设置为1
返回 recv[1];
}
uint16 ps_volt = 0;
uint16 flash_id = 0;
void main(){
/*在此处输入一些信息*/
spi_init();
PS_VOLT = READ_PS_VOLTAGE ();//从 mcp3202读取
flash_id = read_flash_id ();//从 mt25q 读取
/*执行其他操作... *
}
此外、我探测了 MT25Q 引脚上的所有4个信号(CS*、CLK、DQ0、DQ1)、除了 DQ1 (连接到 C2000 MISO)没有任何信号输出(预期会得到一个 ID 字节- 20h)外、所有信号看起来都很正常、 我 一直为该引脚获取低电平信号。
随附 MT25Q 数据表。
e2e.ti.com/.../mt25q_5F00_qlhs_5F00_l_5F00_128_5F00_aba_5F00_0.pdf
请提供建议。