CC1020寄存器读写函数
根据CHIPCON公司AN_025_source_code_1_2源码改编(模拟SPI部分)。改进之处:1:把写函数的合并字节部分去掉。
2:优化代码。
3:读写操作完后把IO口及时设成输入,提高可靠性。
代码经过反复测试,运行良好,测试PASS!!
#define PDO RA0
#define PDI RA0
#define PCLK RA7
#define PSEL RA2
#define DIO RA1
#define DCLK RB0
#define SETDIO TRISA1
#define SETPIO TRISA0
#define INPUT1
#define OUTPUT 0
#define FALSE 0
#define TRUE1
//本人用F628的接口部分。
/****************************************************************************/
/*This routine writes to a single CC1020 register */
/****************************************************************************/
void WriteCC1020(char val){
char BitCounter;
for (BitCounter=8;BitCounter!=0;BitCounter--){
PCLK=0;
PDI=0;
if(val&0x80)
PDI=1;
val<<=1;
PCLK=1;
}
PCLK=0;
}
void WriteToCC1020Register(char Address, char data)
{
SETPIO=OUTPUT;
PSEL=0;
WriteCC1020((Address<<1)|0x01); //写数最低位是1,Address最高位无用
WriteCC1020(data);
SETPIO=INPUT;
PSEL=1;
}
/****************************************************************************/
/*This routine reads from a single CC1020 register */
/****************************************************************************/
char ReadFromCC1020Register(char Address)
{
char BitCounter;
char Byte;
SETPIO=OUTPUT;
PSEL=0;
// Send address bits
WriteCC1020(Address<<1); //读数最低位是0,位移后最低位一定是0。
// Set up PDATA as an input
SETPIO=INPUT;
for (BitCounter=8;BitCounter!=0;BitCounter--){
PCLK=1;
Byte<<=1;
if(PDO)
Byte|=1;
PCLK=0;
}
PSEL=1;
return Byte;
}
页:
[1]