配置了主机模式,并且bS0_DATA_DIR配置为1,在这样的配置下如何去读取从机设备的数据?
我测试的时候发现读回的数据会重复出现两次,代码如下:
//读操作
CS2 = 0;
CH559SPI0Write(0xff);
//mDelaymS (10);
dat = CH559SPI0Read();
//printf("recv[1]: %02x\r\n", (UINT16)dat);
CS2 = 1;
//初始化
void CH559SPI0HostInit(void)
{
UINT8 i = 0;
PORT_CFG &= ~bP1_OC;
P1_DIR |= (bSCK | bMOSI | bSCS1 | bSCS2 | bSCS3 | bSCS4); //| bSCS);
P1_IE |= bMISO; //引脚配置
SPI0_SETUP &= ~(bS0_MODE_SLV | bS0_BIT_ORDER); //设置为主机模式,字节顺序为大端模式
SPI0_CTRL |= bS0_MOSI_OE | bS0_SCK_OE | bS0_MST_CLK | bS0_DATA_DIR; //MISO输出使能,SCK输出使能
SPI0_CTRL &= ~(bS0_2_WIRE);
//SPI0_CTRL &= ~(bS0_DATA_DIR); //主机写,默认不启动写传输,如果使能bS0_DATA_DIR,
//那么发送数据后自动产生一个字节的时钟,用于快速数据收发
SET_SPI0_CK(6); //6分频
SPI0_CTRL &= ~bS0_CLR_ALL; //清空SPI0的FIFO,默认是1,必须置零才能发送数据
CS1 = 1;
CS2 = 1;
CS3 = 1;
CS4 = 1;
}
//写函数
void CH559SPI0Write(UINT8 dat)
{
SPI0_DATA = dat;
while(S0_FREE == 0); //等待传输完成
//printf("dat:%02X\r\n", (UINT16)dat);
//如果bS0_DATA_DIR为1,此处可以直接读取一个字节的数据用于快速读写
}
//读函数
UINT8 CH559SPI0Read()
{
SPI0_DATA = 0xff;
while(S0_FREE == 0);
return SPI0_DATA;
}