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.
工具/软件:Code Composer Studio
您好!
我在用作 SPI 操作的 McBSP 上遇到了问题。我在 SPI 回送模式下测试了 McBSP 的 controlSUITE 中的示例。 它位于..\controlSUITE\device_support\f2833x\v141\DSP2833x_examples_ccsv5\McBSP_SPI_loopback。 当我 用2 (16位 )或0 (8位)更改"McbspbRegs.RCR1.bit.RWDLEN1=5;"时、它运行良好。它运行良好。
但是当我 设置 DLB=0时、接收数据总是0xff、我不能这么做。
我的配置硬件:
GPIMO、MOSI、CLK 信号连接闪存(IS25LP064) 和 MCP2515.Flash CS 信号使用在 DO 模式下设置 的 GP59引脚、MCP2515 CS 信号使用在 DO 模式下设置的 gp27引脚。
我的可配置软件:
void McBSP_GPIO_init (void) { EALLOW; //使用 GPIO 寄存器配置 McBSP-A 引脚*/ //这指定哪些可能的 GPIO 引脚将是 McBSP 功能引脚。 //注释掉其他不需要的行。 GpioCtrlRegs.GPAMUX2.bit.GPIO24 = 3;// GPIO24是 MDXB 引脚(根据需要提供注释) GpioCtrlRegs.GPAMUX2.bit.GPIO25 = 3;// GPIO25是 MDRB 引脚(根据需要提供注释) GpioCtrlRegs.GPAMUX2.bit.GPIO2=3; / GPIO3.Gpio216.CMO3.B 引脚(需要提供注释) // GPIO27是 MFSXB 引脚(根据需要注释) //启用所选引脚的内部上拉* //用户可以启用或禁用上拉。 //这将启用指定引脚的上拉电阻。 //注释掉其他不需要的行。 GpioCtrlRegs.GPAPUD.bit.GPIO24=0; //在 GPIO24 (MDXB)上启用上拉(根据需要添加注释) GpioCtrlRegs.GPAPUD.bit.GPIO25 = 0; //在 GPIO25 (MDRB)上启用上拉(根据需要注释) GpioCtrlRegs.GPAPUD.bit.GPIO26 = 0; //启用 GPIO26 (MCLKXB)上的上拉电阻(根据需要注释) // GpioCtrlRegs.GPAPUD.bit.GPIO27 = 0; //在 GPIO27 (MFSGB)上启用上拉电 阻(根据需要注释)//将所选输入引脚的限定条件设置为仅异步*/ //这将为所选引脚选择异步(无限定条件)。 //注释掉其他不需要的行。 GpioCtrlRegs.GPAQSEL2.bit.GPIO25 = 3;//异步输入 GPIO25 (MDRB)(需要注释) GpioCtrlRegs.GPAQSEL2.bit.GPIO26 = 3;//异步输入 GPIO26 (MCLKXB)(需要注释) // GpioCtrlRegs.GPAQSEL2.bit.GPIO27 = 3;// asynch 输入 GPIO27 (MFDXB)(需要时)// GpioCtrlRegs.GPAQSEL2.bit.GPIO27 = 3;// asynch McBSP 复 位发送器*。 pMcbspReg ->SPCR2.bit.XRST = 0; pMcbspReg ->SPCR1.bit.RRST = 0; //step2将采样率发生器置于复位 pMcbspR2->SPCR2.bit.GRST = 0; pMcbspReg = 0XM=0XM=CLKSPR=0XM=0XM=0XM=pMcKSRM=0;pMcB=CLR=0XM=0XM=CLKSPR=0XM=0XM=CLR=0M=0PbCLKSRM=0PbCLR=0PbCLR=0;pbCLR=0PbSPR=0P 非环回模式、1:环回模式 //STEP3影响 SPI 操作的程序寄存 器 pMcbspReg ->SPCR1.bit.CLKSTP = 2;//>=2 spimode pMcbspReg ->PCR.bit.CLKXP =0;//bit1=0:在 CLKX 的上升沿对传输数据进行采样。 pMcbspReg ->pcr.bit.CLKRP =0;//bit0:0:接收数据在 MCLKR 的下降沿被采样 // pMcbspReg ->pcr.bit.CLKXM =1;//master pMcbspReg ->xCR2.bit.XPh相= 0;// pMCRDCn 帧中只有一个阶段 =帧中只有一个阶段 1 =发送帧中只有一个字1;pMCRSPR0 = 1;pMCR0 = 1 接收帧中只有一个字= 1;pMCRDCn = 1 = 1;pMCRSPR0 = 1;pMCR0 = 1 = 1;pMCRSPR0 = 1;pMCR0 = 1 = pMCR0 = 1;pMCRSPR0 = 1;pMCR0 = pMCR0 = pMCRSPR0 = 1;pMCRCR1;pMCRn = pMCR0 = 1 = 1;pMCR0 = pMCRSPR0 = pMCR0 = 1;pMCR0 = pMC1;pMCRSPRSPR0 = 1 = pMCR0 = pMC1;pMCRSPR0 = pMcbspReg -> SRGR2.bit.CLKSM = 1;//LSPCLK pMcbspReg -> SRGR1.bit.CLKGDV = 0xc7;// 0x4a:clkG=(150m/4)/(4A+1)=500kHz;0x7c clkG=(150m/ 100m/ 发送帧中只有一个字 100m/每位 )= 0x1m/接收帧中只有一个字每位201m/每位/r1m/每位/rmcr1m/每位/r1mspr1m/每位/r1mcr1mcr1mcr = 0xr1prmcr1mcr1mcr = 0xr1pr1m/每位/rmcr1mcr1pr1prr1prrmcrmcr1prr1prm/ mcrmcr1prrrrr1pr1prrrm/ mcr1prmcr1prmcr1pr1pr1pr1pr1 pMcbspReg ->SPCR2.bit.XRST = 1; pMcbspReg ->SPCR2.bit.frst = 1; clkg_delay_loop (); } 单字节 SPI_Writebyte Byte (UByte WRI_DATA) { // UReadreData = 0; McbspbRegs.DXR1.ALL = WRI_DATA; while (McbspbRegs.SPCR1.bit.RRDY = 0){} 返回 McbspbRegs.DRR1.all; // reData = McbspbRegs.DRR1.all; //返回 reData; } #define FLASH_CS_H GPIO_Write_TE (59、1) #define FLASH_CS_L GPIO_Write_TE (59、0) uint16_t Is25064_Write_TE (59、SPI_ReadByte )= 0x00;Spi_ReadByte (Spi_Read_Write_Sp_ReadTemp = 0x90_Sp_Read_ReadByte);= 0x90_Read_Spine_Spin_Read_Read_Read_Spice (0x000_Spine_Spine_Spine_Spin_Read_Read_Read_Write_Spin temp = SPI_WriteReadByte (0x00); Temp|=SPI_WriteReadByte (0xFF)<<8;//制造商 ID =9dh Temp|=SPI_WriteReadByte (0xFF);//器件 ID =16h FLASH_CS_H; return Temp; } void Is25lp064_Init (0xSPI_WriteReadByte)(0xFF);// TI_FLASH (63 TO_FLASH (TE_GPIO_E )、TO_FLASH (0是写保护状态,1是不保护状态)、TO_FLASH (t_TO_58、TO_FLASH、TO_TO_E、TO_E、TO_E、TOP_59 (TOP_FLASH)、TOP_FLASH、TOP_FLASH、TOP_58、TOP_LET_GPIO/ TOP_58 (TOP_58)、TOP_LET_GPIO_SET 1);//拉低可以使设备处于暂停状态,恢复会高,设备继续拉低之前的工作,set 1不暂停 FLASH_CS_H;//默认不选择 McBSP_GPIO_init (); } #define MCP2515_CS_H GPIO_Write_TE (27、1) #define MCP2515_CS_L GPIO_Write_TE (27、0) Ubyte SPI_TX[20]、SPI_RX[20];MCP2515_TE_ET_PRECT_PRECT_PRECT_0 (2)/PM2515_INTS_INTS_INTS_PRECT_PRECT_PRECT_PRECT_PRECT_0) ;// PRECT_PRECT_INTS_0 GPIO_Write_TE (50、1);// /* MCP2515和闪存共用 mcbsp接口 由于 Flash的初始化中调用了 McBSP_GPIO_init 这里就不需要再次调用了。 * ***/ } void SPI_WR (Ubyte len) { 字节 I = 0; uint32_t TIME_OUT = 0x1000; MCP2515_CS_L;//CS 使能 对于(i=0;i
您好!
那么、您使用的是多从器件配置吗? MCLKX、MDX 和 MDR 连接到两个从器件? 您可以为每个信号提供独立的芯片选择信号。 请确认。
您是否在示波器上观察到了信号? 结果如何?
如果您只连接和访问其中一个从站、则通信是否正常?
您的代码中没有任何内容看起来不合适。 我会检查您的硬件连接、以查看问题是否存在。
此外、在发布代码时、请使用 RTF 编辑器中提供的代码格式化工具。 它使每个人都能更轻松地查看代码。 我已修改了您的帖子、以显示这是如何显示的。
此致、
3月