|
怎样来实现无线通讯的呢?简单的说,是通过MCU来控制无线芯片的寄存器来实现无线数据的发送和接收。从这个意义来说,无线芯片的寄存器是无线通讯的基础。无线芯片与mcu通讯,一般都是通过spi口,查看无线芯片的spi时序图,设置好mcu的spi,怎样来判断mcu与无线芯片能正确通讯呢?我们可以读无线芯片中寄存器的默认值,并通过串口传出来,看与芯片手册上的是否一样。
只有mcu与无线芯片通讯正常了,我们才能控制无线芯片。在论坛上,经常看到,类似这样的问题,“我的无线没有数据传出,谁能给我一段初始化的代码”,其实,对于初始化,只要我们仔细看过芯片手册,一般配置都没有问题,即使有些配置不是十分清楚,可以通过具体的实际测试来知道。那么问题处在哪里呢?在我看来,它没有一步一步的来测试每一个功能部分的正确性。在这里面,包含有许多不可知因素在里面。在发射端,第一,MCU和无线芯片是否通讯正常,第二,各个寄存器的值是否写入正常,有没有读出验证一下,第三,数据发送程序是否正确调用,第四数据是否正常发射出去;对于接收端,也同样存在同样多的问题,当我们一个一个的把这些问题验证后,你自然就能按照你的要求接收到无线数据了。
以CYWM6935芯片为例,说明怎样去初始化和为什么这样去初始化。 无线芯片如何实现和怎么实现其通讯功能,均由芯片的寄存器所决定。对于由CYW6935组成的一个无线系统,我们需要配置的内容有:
1》 无线通讯所使用的频道(0x21);
2》 中断触发方式(0x05);
3》 是否使用中断及哪些中断(0x07,0x0d,0x1c);
4》 发射有效位数(0x10);
5》 设置发射功率能级(0x23);
6》 数据速率及PN码选择(0x03,0x04);
7》 PN码设置(0x11—0x18);
8》 时钟是否输出(0x24);
9》 发射还是接收状态(0x03);
其他一些寄存器的值,我们采用芯片的默认值。
我们初始化的结果是:中断采用下降沿有效;SERDES有效;使能接收中断;用64位PN码,通讯速率为15.625Kbit/s;发射功率能级选用7,最大;时钟不输出;发射8个数据位都有效。对于频道号,PN码设置和发射接收使能,有专门的函数,这些在程序中是要经常变化的参数。
下面是这些设置的具体初始化程序。
void reg_init(void) //寄存器初始化
{
spiw(0x05,0x00);//IRQ下降沿中断有效
spiw(0x06,0x0b);//SERDES有效
spiw(0x07,0x01);//接收中断使能,FullA(bit0)
spiw(0x10,0xff);//发射的8位均有效
spiw(0x20,0x44);//0x2e和0X2F写有效PA OUTPUT Enable
// spiw(0x21,0x30); //设置频道号为0X30,
spiw(0x23,0x07); //设置PA为7
spiw(0x24,0x40);//13M时钟不输出
spiw(0x26,0xc0);//REG_VCO_CAL
spiw(0x2e,0x80);//REG_PWR_CTL
spiw(0x32,0x41);//必须写0X41
spiw(0x33,0x41);//必须写0X41
}
void radio_receive_on(void)//使能无线模块接收,开INT0中断
{ //清除旧的数据和中断
spir(0x09);
spir(0x08);
spiw(0x03,0x90);//使能接收
GICR = 0X40; //开INT0中断
}
void radio_trans_on(void) //使能无线模块发射,关INT0中断
{
GICR = 0X00;//关INT1中断
spiw(0x03,0x50); //使能发射
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|