Other Parts Discussed in Thread: ADS131A04,
最近学习使用TMS320VC5509a控制ads131a04,利用Mcbsp模拟spi实现,希望能实现32位数据的发送与接受。
实际测试时程序中利用mcbsp_write32()输出32位数据,但是仅能检测到Dx0口输出高16位数据。
Mcbsp有关输入和输出的寄存器配置如下:
MCBSP_RCR1_RMK(
MCBSP_RCR1_RFRLEN1_OF(0), /* RFRLEN1 = 0,接收帧每帧一字 */
MCBSP_RCR1_RWDLEN1_32BIT /* RWDLEN1 = 5,每字32位 */
),
MCBSP_RCR2_RMK(
MCBSP_RCR2_RPHASE_SINGLE, /* RPHASE = 0,单段帧 */
MCBSP_RCR2_RFRLEN2_OF(0), /* RFRLEN2 = 0,该帧无字 */
MCBSP_RCR2_RWDLEN2_8BIT, /* RWDLEN2 = 0,每字8bit */
MCBSP_RCR2_RCOMPAND_MSB, /* RCOMPAND = 0,无压缩,先传输高位数据 */
MCBSP_RCR2_RFIG_YES, /* RFIG = 0,每个帧同步信号启动一次数据接收 */
MCBSP_RCR2_RDATDLY_1BIT /* RDATDLY = 1,1bit数据延迟 */
),
MCBSP_XCR1_RMK(
MCBSP_XCR1_XFRLEN1_OF(0), /* XFRLEN1 = 0,发送帧每帧一字 */
MCBSP_XCR1_XWDLEN1_32BIT /* XWDLEN1 = 5,每字32位 */
),
MCBSP_XCR2_RMK(
MCBSP_XCR2_XPHASE_SINGLE, /* XPHASE = 0,单段帧 */
MCBSP_XCR2_XFRLEN2_OF(0), /* XFRLEN2 = 0,该帧无字 */
MCBSP_XCR2_XWDLEN2_32BIT, /* XWDLEN2 = 5,每字32bit */
MCBSP_XCR2_XCOMPAND_MSB, /* XCOMPAND = 0,无压缩,先传输高位数据 */
MCBSP_XCR2_XFIG_YES, /* XFIG = 0,每个帧同步信号启动一次数据发送 */
MCBSP_XCR2_XDATDLY_1BIT /* XDATDLY = 1,1bit数据延迟 */
),
数据输出部分代码如下:
Uint32 RECEIVE; //接收spi返回的字符
delay_ms(20);
/*reset ads131*/
do
{
while(!MCBSP_xrdy(hMcbsp1));
MCBSP_write32(hMcbsp1,0X00110000);
delay_ms(5);
while(!MCBSP_rrdy(hMcbsp1));
RECEIVE=MCBSP_read32(hMcbsp1);
delay_ms(6);
printf("receive data is : %#X...\n", RECEIVE);
if(RECEIVE == 0xFF040000) //ADS131A04 is ready.break loop
printf("ADS131A04 is ready!\n Configuring Registers...\n");
delay_ms(5);
}while(RECEIVE != 0xFF040000); //初始化成功则跳出循环
ads131a04一直无法初始化成功,由于手边没有示波器,我就尝试着用杜邦线将DX0引脚与DR0引脚相连以测试输出的数据。我尝试着发送信号0X00110000,发现DR0引脚仅接收到高16位信号0X0011,如下图所示。

这种情况有老哥知道是怎么回事吗?