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.
尊敬的团队:
我将 McBSP 配置为 SPI 以驱动 nFLASH。 NFLASH 可以响应 DSP 发送的指令。 由 nflash。的数据波形是正确的、但 DSP 读取的数据不正确、下面是我的代码和波形、我读取的数据是0x90、0xff、0x80、但正确的数据应该是0x20、0x20、0x15 μ s
void McBSPI_IO_Init(void)//SIP初始化 { EALLOW; GpioCtrlRegs.GPAPUD.bit.GPIO24 = 0; // Enable pull-up on GPIO24 (SPISIMO) GpioCtrlRegs.GPAPUD.bit.GPIO25 = 0; // Enable pull-up on GPIO25 (SPISOMI) GpioCtrlRegs.GPAPUD.bit.GPIO26 = 0; // Enable pull-up on GPIO26 (SPICLK) GpioCtrlRegs.GPAQSEL2.bit.GPIO24 = 3; // Asynch input GPIO24 (SPISIMO) GpioCtrlRegs.GPAQSEL2.bit.GPIO25 = 3; // Asynch input GPIO25 (SPISOMI) GpioCtrlRegs.GPAQSEL2.bit.GPIO26 = 3; // Asynch input GPIO26 (SPICLK) GpioCtrlRegs.GPAQSEL2.bit.GPIO27 = 3; // Asynch input GPIO27 (SPISTE) //下面的值是3 GpioCtrlRegs.GPAMUX2.bit.GPIO24 = 3; // Configure GPIO24 as SPISIMO GpioCtrlRegs.GPAMUX2.bit.GPIO25 = 3; // Configure GPIO25 as SPISOMI GpioCtrlRegs.GPAMUX2.bit.GPIO26 = 3; // Configure GPIO26 as SPICLK //Configure GPIO27 as SPISTEA GpioCtrlRegs.GPAPUD.bit.GPIO27 = 0;// Enable pullup GpioDataRegs.GPASET.bit.GPIO27 = 1; // Load output latch GpioCtrlRegs.GPAMUX2.bit.GPIO27 = 0; // GpioCtrlRegs.GPADIR.bit.GPIO27 = 1; // GPIO27 = output EDIS; } void MCBSP_SPI_Init(void)//SPI初始化 { McBSPI_IO_Init();//IO初始化 EALLOW; SysCtrlRegs.PCLKCR0.bit.MCBSPBENCLK = 1; EDIS; //SET McBSP-B to SPI master mode with no cycle clk delay // McBSP-B register settings McbspbRegs.SPCR2.all=0x0000; // Reset FS generator, sample rate generator & transmitter McbspbRegs.SPCR1.all=0x0000; // Reset Receiver, Right justify word, Digital loopback dis. //McbspbRegs.PCR.all=0x0F08; //(CLKXM=CLKRM=FSXM=FSRM= 1, FSXP = 1) McbspbRegs.SPCR1.bit.RJUST = 0; McbspbRegs.PCR.bit.FSXM=1;//FSX generate by in ternal McbspbRegs.PCR.bit.CLKXM=1;// spi master mode 1 McbspbRegs.PCR.bit.FSXP=1;// FSX active low McbspbRegs.PCR.bit.CLKXP=1;// rising edge of clk,output data valid McbspbRegs.PCR.bit.SCLKME=0;// LSPCLK McbspbRegs.PCR.bit.FSRM=1;//FSR generate by internal McbspbRegs.PCR.bit.CLKRM=1;// CLK R OUTPUT McbspbRegs.PCR.bit.FSRP=1;// FSR active low McbspbRegs.PCR.bit.CLKRP=1;// falling edge of clk,input data valid McbspbRegs.PCR.bit.SCLKME = 0; McbspbRegs.SPCR1.bit.DLB = 0; McbspbRegs.SPCR1.bit.CLKSTP = 0x03;// spi mode with clk delay McbspbRegs.SPCR2.bit.FREE=1; McbspbRegs.SPCR2.bit.SOFT=1; McbspbRegs.RCR2.bit.RPHASE=0;//single frame phase McbspbRegs.RCR2.bit.RCOMPAND=0;//any data size MSB first McbspbRegs.RCR2.bit.RDATDLY=01;// FSX setup time 1 in master mode. 0 for slave mode (Receive) McbspbRegs.XCR2.bit.XPHASE=0;//single frame phase McbspbRegs.XCR2.bit.XCOMPAND=0;// McbspbRegs.XCR2.bit.XDATDLY=01;// FSX setup time 1 in master mode. 0 for slave mode (Transmit) McbspbRegs.RCR1.bit.RFRLEN1=0;// one word per frame McbspbRegs.RCR1.bit.RWDLEN1=0;// 16-bit word McbspbRegs.XCR1.bit.XFRLEN1=0;//one word per frame McbspbRegs.XCR1.bit.XWDLEN1=0;// 16-bit word // McbspbRegs.SRGR2.all=0x2000; // CLKSM=1, FPER = 1 CLKG periods McbspbRegs.SRGR2.bit.GSYNC=0;// McbspbRegs.SRGR2.bit.CLKSM=1;//lspclk McbspbRegs.SRGR2.bit.FSGM=0;//FSG generate when data are copied to XSR1,2 McbspbRegs.SRGR2.bit.FPER=0x02;//no used //McbspbRegs.SRGR1.all= 0x0F0F;// Frame Width = 1 CLKG period, CLKGDV=16 McbspbRegs.SRGR1.bit.CLKGDV=0x3;// LSPCLK/3 (0x5f,过采样有效,小于此值过采样值偏低不准) McbspbRegs.SRGR1.bit.FWID=0x0f;//FSG Pulse width is 16 McbspbRegs.SPCR2.bit.GRST=1;// Enable the sample rate generator delay_loop(); // Wait at least 2 SRG clock cycles McbspbRegs.SPCR2.bit.XRST=1;// Release TX from Reset McbspbRegs.SPCR1.bit.RRST=1;// Release RX from Reset McbspbRegs.SPCR2.bit.FRST=1;// Frame Sync Generator reset } void m25p16_readID(void) { Select_Flash(); while(McbspbRegs.SPCR2.bit.XRDY == 0); McbspbRegs.DXR1.all = RDID&0x00FF; while(McbspbRegs.SPCR2.bit.XRDY == 0); McbspbRegs.DXR1.all = 0xFF; while( McbspbRegs.SPCR1.bit.RRDY == 0 ) ; temp[0] = McbspbRegs.DRR1.all; while(McbspbRegs.SPCR2.bit.XRDY == 0); McbspbRegs.DXR1.all = 0xFF; while( McbspbRegs.SPCR1.bit.RRDY == 0 ) ; temp[1] = McbspbRegs.DRR1.all; while(McbspbRegs.SPCR2.bit.XRDY == 0); McbspbRegs.DXR1.all = 0xFF; while( McbspbRegs.SPCR1.bit.RRDY == 0 ) ; temp[2] = McbspbRegs.DRR1.all; DELAY_US(3); NotSelect_Flash(); }
您好、Wei、
这是通过外部还是内部回送实现的?
此致、
Marlyn
你(们)好
我进行了内部回送测试。
此致、
Wei
好的、您是否有可用于探测连接的逻辑分析仪? 此外、McBSP 引脚本身上显示的值是多少?
此致、
Marlyn