📄 cc1100.lst
字号:
204 /*功能描述:单字节读取寄存器 */
205 /* */
206 /*********************************************************/
207 unsigned char Spi_Read_Byte(unsigned char addr)
208 {
209 1 unsigned char value;
210 1
211 1 CSN_L; //片选使能
212 1 while (MISO_H); //等待响应
213 1 SpiTxRx_Byte((addr|Read_Byte)); //送出地址
214 1 value = SpiTxRx_Byte(0); //读寄存器
215 1 CSN_H; //结束使能
216 1
217 1 return value; //返回数据
218 1 }
219
220 /**********************************************************/
221 /*函数名字:Spi_Write_Byte */
222 /*输入参数:寄存器地址,配置 */
223 /*输出参数:无 */
224 /*功能描述:单字节写入寄存器 */
225 /* */
226 /**********************************************************/
227 void Spi_Write_Byte(unsigned char addr,unsigned char value)
228 {
229 1 CSN_L; //片选使能
230 1 while (MISO_H); //等待响应
231 1 SpiTxRx_Byte(addr); //送出地址
232 1 SpiTxRx_Byte(value); //写入配置
233 1 CSN_H; //结束使能
234 1 }
235
236 /**********************************************************/
237 /*函数名字:Spi_Read_Burst */
238 /*输入参数:寄存器地址,接收缓冲区首址,接收字节数 */
239 /*输出参数:结果存储在缓冲区地址 */
240 /*功能描述:连续读取寄存器数据 */
241 /* */
C51 COMPILER V7.50 CC1100 05/01/2009 21:14:21 PAGE 5
242 /**********************************************************/
243 void Spi_Read_Burst (unsigned char addr,unsigned char *buffer,unsigned char count)
244 {
245 1 unsigned char i;
246 1
247 1 CSN_L; //片选使能
248 1 while (MISO_H); //等待响应
249 1 SpiTxRx_Byte((addr|Read_Burst)); //连续读取
250 1
251 1 for (i = 0; i < count; i++) //
252 1 {
253 2 buffer[i] = SpiTxRx_Byte(0); //存储数据
254 2 }
255 1 CSN_H; //结束使能
256 1 }
257
258 /**********************************************************/
259 /*函数名字:Spi_Write_Burst */
260 /*输入参数:寄存器地址,发射缓冲区首址,发送字节数 */
261 /*输出参数:无 */
262 /*功能描述:连续写入寄存器数据 */
263 /* */
264 /**********************************************************/
265 void Spi_Write_Burst(unsigned char addr,unsigned char *buffer,unsigned char count)
266 {
267 1 unsigned char i;
268 1
269 1 CSN_L; //片选使能
270 1 while (MISO_H); //等待响应
271 1 SpiTxRx_Byte((addr|Write_Burst)); //连续写入
272 1
273 1 for (i = 0; i < count; i++) //
274 1 {
275 2 SpiTxRx_Byte(buffer[i]); //送出数据
276 2 }
277 1 CSN_H; //结束使能
278 1 }
279
280 /*********************************************************/
281 /*函数名字:Spi_Write_Packet */
282 /*输入参数:发送缓冲区首址,数组长度 */
283 /*输出参数:无 */
284 /*功能描述:发送缓冲区数据 */
285 /* */
286 /*********************************************************/
287 void Spi_Write_Packet(unsigned char *Tx_buffer,unsigned char size)
288 {
289 1 unsigned char i;
290 1
291 1 Spi_Write_Byte(CC_TXFIFO,size); //先送长度
292 1 Spi_Write_Burst(CC_TXFIFO,Tx_buffer,size); //发送数据
293 1 Spi_Write_Strobe(CC_STX); //发送模式
294 1
295 1 i = 0;
296 1 while (GDO0_L) //等待送出
297 1 {
298 2 if (i > 10) break; //限时等待
299 2 delay_nms(2); //
300 2 i++; //
301 2 }
302 1 i = 0;
303 1 while (GDO0_H) //送出完毕
C51 COMPILER V7.50 CC1100 05/01/2009 21:14:21 PAGE 6
304 1 {
305 2 if (i > 10) break; //限时等待
306 2 delay_nms(2); //
307 2 i++; //
308 2 }
309 1 delay_nms(1);
310 1 Spi_Write_Strobe(CC_SFTX); //清缓冲区
311 1 Spi_Write_Strobe(CC_SIDLE); //进入空闲
312 1 Spi_Write_Strobe(CC_SRX); //进入接收
313 1 }
314
315 /*********************************************************/
316 /*函数名字:Spi_Read_Packet */
317 /*输入参数:接收缓冲区首址,最大长度 */
318 /*输出参数:校验标志 */
319 /*功能描述:数据存入缓冲区 */
320 /* */
321 /*********************************************************/
322 unsigned char Spi_Read_Packet(unsigned char *Rx_buffer,unsigned char length)
323 {
324 1 unsigned char status[2];
325 1 unsigned char size = 0;
326 1
327 1 delay_nms(1);
328 1 size = Spi_Read_Byte(CC_RXFIFO); //数据长度
329 1
330 1 // Send_char(size);
331 1
332 1 if (size < length)
333 1 {
334 2 Spi_Read_Burst(CC_RXFIFO,Rx_buffer,size); //接收数据
335 2 Spi_Read_Burst(CC_RXFIFO,status,2); //校验数据
336 2 }
337 1 Spi_Write_Strobe(CC_SFRX); //清缓冲区
338 1 return (status[1] & CRC_OK); //校验标志
339 1 }
340
341 /*********************************************************/
342 /*函数名字:WriteRfSettings */
343 /*输入参数:无 */
344 /*输出参数:无 */
345 /*功能描述:模块寄存器配置 */
346 /* */
347 /*********************************************************/
348 void WriteRfSettings(void)
349 {
350 1 Spi_Write_Byte (CC_IOCFG2,IOCFG2); //
351 1 Spi_Write_Byte (CC_IOCFG0,IOCFG0); //
352 1 Spi_Write_Byte (CC_FIFOTHR,FIFOTHR); //
353 1 Spi_Write_Byte (CC_PKTLEN,PKTLEN); //
354 1 Spi_Write_Byte (CC_PKTCTRL1,PKTCTRL1); //
355 1 Spi_Write_Byte (CC_PKTCTRL0,PKTCTRL0); //
356 1 Spi_Write_Byte (CC_ADDR,ADDR); //
357 1 Spi_Write_Byte (CC_CHANNR,CHANNR); //
358 1 Spi_Write_Byte (CC_FSCTRL1,FSCTRL1); //
359 1 Spi_Write_Byte (CC_FSCTRL0,FSCTRL0); //
360 1 Spi_Write_Byte (CC_FREQ2,FREQ2); //
361 1 Spi_Write_Byte (CC_FREQ1,FREQ1); //
362 1 Spi_Write_Byte (CC_FREQ0,FREQ0); //
363 1 Spi_Write_Byte (CC_MDMCFG4,MDMCFG4); //
364 1 Spi_Write_Byte (CC_MDMCFG3,MDMCFG3); //
365 1 Spi_Write_Byte (CC_MDMCFG2,MDMCFG2); //
C51 COMPILER V7.50 CC1100 05/01/2009 21:14:21 PAGE 7
366 1 Spi_Write_Byte (CC_MDMCFG1,MDMCFG1); //
367 1 Spi_Write_Byte (CC_MDMCFG0,MDMCFG0); //
368 1 Spi_Write_Byte (CC_DEVIATN,DEVIATN); //
369 1 Spi_Write_Byte (CC_MCSM0,MCSM0); //
370 1 Spi_Write_Byte (CC_FOCCFG,FOCCFG); //
371 1 Spi_Write_Byte (CC_BSCFG,BSCFG); //
372 1 Spi_Write_Byte (CC_AGCCTRL2,AGCCTRL2); //
373 1 Spi_Write_Byte (CC_AGCCTRL1,AGCCTRL1); //
374 1 Spi_Write_Byte (CC_AGCCTRL0,AGCCTRL0); //
375 1 Spi_Write_Byte (CC_FREND1,FREND1); //
376 1 Spi_Write_Byte (CC_FREND0,FREND0); //
377 1 Spi_Write_Byte (CC_FSCAL3,FSCAL3); //
378 1 Spi_Write_Byte (CC_FSCAL2,FSCAL2); //
379 1 Spi_Write_Byte (CC_FSCAL1,FSCAL1); //
380 1 Spi_Write_Byte (CC_FSCAL0,FSCAL0); //
381 1 Spi_Write_Byte (CC_FSTEST,FSTEST); //
382 1 Spi_Write_Byte (CC_TEST2,TEST2); //
383 1 Spi_Write_Byte (CC_TEST1,TEST1); //
384 1 Spi_Write_Byte (CC_TEST0,TEST0); //
385 1 }
386
387 /*********************************************************/
388 /*函数名字:RX_ACK */
389 /*输入参数:无 */
390 /*输出参数:应答标志 */
391 /*功能描述:等待从机应答,返回应答标志 */
392 /* */
393 /*********************************************************/
394 unsigned char RX_ACK(void)
395 {
396 1 unsigned char *buffer = Rx_data;
397 1 unsigned int size,i=0;
398 1
399 1 size = sizeof(Rx_data); //最大长度
400 1 while (i <10000) //限时应答
401 1 {
402 2 delay_ns(15);
403 2 i++;
404 2 if (GDO0_H) //等待应答
405 2 {
406 3 if (Spi_Read_Packet(Rx_data,size)) //应答出现
407 3 {
408 4 if (!(buffer[0] ^= buffer[1])) //
409 4 {
410 5 if ((buffer[2] == (~(buffer[3])))) //
411 5 {
412 6 return 1; //成功应答
413 6 }
414 5 }
415 4 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -