您好,我用的CS1237芯片目前在读写SPI寄存器时,下发指令和读取的始终不一致,我用的是STM8S003芯片读取的,可以的话麻烦发一份CS1237的demo到2695047345@qq.com,谢谢。
//********************************************读SPI寄存器************************************************
u8 CS1237_ReadReg()
{
u8 i = 0;
u8 tem = 0;
CS1237_SCLK_LOW();
delay_us(50); //Wakeup MCU
CS1237_Data_IS_INPUT(); //输入模式
while (CS1237_Data_PIN_STATE())//需要实际工程使用需要加入超时
{
delay_us(10);//Wakeup MCU
i++;
if(i>20)
{
return 0;
}
};
for (i = 0; i < 26; i++) // 1-26th CLK 前24读ADC 数据 后25 26读寄存器写操作状态
C1237_OneClk();
C1237_OneClk(); //27th CLK
CS1237_Data_IS_Out_HIGH(); //Force High cs1237 direction input 27 那根线输出线拉高
C1237_OneClk(); // 28th CLK
C1237_OneClk(); // 29th CLK 那根线切换成输入
tem = 0xAC; // AC准备读命令(0x56)左移1位 下边开始命令写入
for (i = 0; i < 7; i++) // 30~36th CLK 开始高位先输入
{
if (tem & 0x80)
CS1237_Data_IS_Out_HIGH();
else
CS1237_Data_IS_Out_LOW();
tem <<= 1;
C1237_OneClk();
}
CS1237_Data_IS_Out_HIGH(); // cs1237 change to output direction切换那根线的方向
C1237_OneClk(); // 37th CLK
for (i = 0; i < 8; i++) // 38~45th CLK 输入寄存器配置数据或输出寄存器配置数据 高位先
{
tem <<= 1;
C1237_OneClk();
if (CS1237_Data_PIN_STATE())
tem++;
}
C1237_OneClk(); // 那根线切换为输出 并且拉高
// 46th CLK
return tem;
}
//*******************************************写SPI寄存器*************************************************
void C1237_WriteReg(u8 mData)
{
u8 i = 0;
u8 tem = 0;
CS1237_SCLK_LOW();
delay_us(50); //Wakeup MCU
CS1237_Data_IS_INPUT();
while (CS1237_Data_PIN_STATE())//需要实际工程使用需要加入超时
{
delay_us(10);//Wakeup MCU
i++;
if(i>20)
{
return;
}
};
for (i = 0; i < 26; i++) // 1~26th CLK
C1237_OneClk();
C1237_OneClk();//27th CLK
CS1237_Data_IS_Out_HIGH(); // force high
C1237_OneClk(); // 28th CLK
C1237_OneClk(); // 29th CLK
tem = 0xCA; // CA准备写命令(0x65)左移1位 下边开始命令写入
for (i = 0; i < 7; i++) // 30~36th CLK
{
if (tem & 0x80)
CS1237_Data_IS_Out_HIGH();
else
CS1237_Data_IS_Out_LOW();
tem <<= 1;
C1237_OneClk();
}
CS1237_Data_IS_INPUT(); // direction chage to intput direction
C1237_OneClk(); // 37th CLK
for (i = 0; i < 8; i++) // 38~45th CLK
{
if (mData & 0x80)
CS1237_Data_IS_Out_HIGH();
else
CS1237_Data_IS_Out_LOW();
mData <<= 1;
C1237_OneClk();
}
CS1237_Data_IS_INPUT();
C1237_OneClk(); // 46th CLK
}
举报
更多回帖