6241|14

30

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

用Launchpad自带SPI模块调试24L01 [复制链接]

刚刚编了一大段,结果按了backspace后全部没有啦。现在就简单的介绍下吧。
首先感谢一下shower.xu,我的实验就是建立在他编写的程序基础上。放个传送门,方便大家下载他的程序,https://bbs.eeworld.com.cn/viewthread.php?tid=310011
因为硬件SPI接口和他的定义有所不同,所以要修改下spi.c文件中的宏定义
#define CE        7
#define CSN       0
#define CLK       4
#define MOSI      2
#define MISO      1
#define IRQ       5
然后配置和硬件SPI有关的寄存器和端口,把他的IO_initial()函数修改为:
void IO_initial()
{
  PDIR |= BIT(CSN) + BIT(CE) + BIT(GLED);   
  
  P1REN |= BIT(IRQ);
  P1OUT |= BIT(IRQ);
  
  P1REN |= BIT(Key);
  P1OUT |= BIT(Key);
  
  P1SEL = BIT1 + BIT2 + BIT4;
  P1SEL2 = BIT1 + BIT2 + BIT4;
  UCA0CTL0 |= UCCKPH + UCMSB + UCMST + UCSYNC;  // 3-pin, 8-bit SPI master
  UCA0CTL1 |= UCSSEL_2;                     // SMCLK
  UCA0BR0 |= 0x02;                          // /2
  UCA0BR1 = 0;                              //
  UCA0MCTL = 0;                             // No modulation
  UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
}
我看到论坛上有很多同学说没调试成功,估计最大的问题就出在UCA0CTL0寄存器上。这里面有两位是涉及到串行时钟的极性和相位的,就是UCCKPH(bit7)和UCCKPL(bit6)。不知道是我不会看时序图还是其他的问题,我总感觉根据24L01的datasheet,时钟极性在非活动状态时是低电平,数据是在UCLK的边沿被捕获,然后在下降沿是改变。按照上述的配置是UCCKPH=1,但是我在看TI给出的硬件SPI时钟极性时序图时总感觉和24L01上的不对照。所以刚开始使用的是UCCKPH=0,结果怎么都调不通。我还以为是后面的发送接收函数写的不对,后来改成UCCKPH=1时就可以使用了。使用硬件SPI无非是改变了原来的模拟SPI_RW()函数,发送和接收的过程改为硬件自动完成,不再使用模拟的时钟。函数修改如下:
uchar SPI_RW(uchar byte)
{
  while(!(IFG2 & UCA0TXIFG));// USCI_A0 TX buffer ready?
  UCA0TXBUF = byte;//Send value
  while(!(IFG2 & UCA0RXIFG));//Has USCI_A0 RX buffer received data?
  byte = UCA0RXBUF;//Received value
  return(byte);
}
程序中的其他部分不用修改。
因为我是刚接触430系列,所以不太会用它的低功耗。所以在上述的SPI中没有使用中断系统,我只是抛砖引玉,后面希望大家集思广益运用中断系统做一个低功耗的系统出来

最新回复

楼主厉害,改了后立马就调通了  详情 回复 发表于 2015-11-19 09:04

点评

用USCI_B0为什么不行呢????求解!!!  详情 回复 发表于 2013-5-4 14:14

赞赏

1

查看全部赞赏

 
点赞 关注(2)

回复
举报

2

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
刚刚接触Launchpad,向各位学习!!!
 
 

回复

13

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
找了很久,终于找到了,感谢楼主的分享!今晚就试验一下!
 
 
 

回复

13

帖子

0

TA的资源

一粒金砂(中级)

4
 
测试成功,那个高兴啊

点评

祝贺一下 HOHO  详情 回复 发表于 2013-3-25 13:30
 
 
 

回复

2万

帖子

74

TA的资源

管理员

5
 

回复 4楼 yyt1372 的帖子

祝贺一下 HOHO
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 

回复

43

帖子

0

TA的资源

一粒金砂(中级)

6
 
我在试。。 不知道B能不?
 
 
 

回复

17

帖子

0

TA的资源

一粒金砂(中级)

7
 

回复 楼主 我很无语啊 的帖子

用USCI_B0为什么不行呢????求解!!!

点评

B口可以,我已经调试成功了。。 要注意到有个CLK引脚  详情 回复 发表于 2013-5-13 17:39
 
 
 

回复

43

帖子

0

TA的资源

一粒金砂(中级)

8
 

回复 7楼 destinydd 的帖子

B口可以,我已经调试成功了。。
要注意到有个CLK引脚

点评

可以详细一点  详情 回复 发表于 2013-5-15 22:32
 
 
 

回复

17

帖子

0

TA的资源

一粒金砂(中级)

9
 

回复 8楼 xj0126 的帖子

可以详细一点

点评

其实就把上面帖子改下 //CE -- P2.0 ; CSN --- P2.1 ; IRQ --- P2.2 //SCLK --- P1.5 ; MISO --- P1.6 ; MOSI --- P1.7 //上一行引脚可以自选 //下一行引脚必须对应 void SPI_IO_Init(void) { P1DIR |=  详情 回复 发表于 2013-5-20 11:34
 
 
 

回复

43

帖子

0

TA的资源

一粒金砂(中级)

10
 

回复 9楼 destinydd 的帖子

其实就把上面帖子改下

//CE -- P2.0  ; CSN --- P2.1 ; IRQ --- P2.2
//SCLK --- P1.5 ; MISO --- P1.6 ; MOSI --- P1.7
//上一行引脚可以自选
//下一行引脚必须对应
void SPI_IO_Init(void)
{
  P1DIR |= BIT(CLK) + BIT(MOSI);
  P2DIR |= BIT(CSN) + BIT(CE);          //output
/*设置NRF24L01 中断
  P2DIR &= ~(BIT(IRQ));                 //set P2.2 is input
  P2IE |= BIT(IRQ);                     //allow P2.2 IQR
  P2IES |= BIT(IRQ);
  P2IFG = 0x00;                         //清除中断标志位*/
  
  P2OUT &= ~BIT(CE);                    //CHIP DISABLE
  P2OUT |= BIT(CSN);                    //CSN IS PULL HIGH.DISABLE THE OPERATION

  P1SEL |= BIT(CLK) + BIT(MOSI) + BIT(MISO);
  P1SEL2 |= BIT(CLK) + BIT(MOSI) + BIT(MISO);
  
  UCB0CTL0 |= UCCKPH + UCMSB + UCMST + UCSYNC;  // 3-pin, 8-bit SPI master
  UCB0CTL1 |= UCSSEL_2;                     // UCSSEL_2=0x80 -- SMCLK
  UCB0BR0 |= 0x02;                          //  /2
  UCB0BR1 = 0;                              // 位速率控制
// UCB0MCTL = 0;                             // No modulation
  UCB0CTL1 &= ~UCSWRST;
}
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

11
 
接收的部分要不要改端口、改了之后串口的端口怎么办
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

12
 
感谢,我也是卡在CCKPH这个地方
 
 
 

回复

19

帖子

1

TA的资源

一粒金砂(中级)

13
 
您好,我调试问题就是:程序运行一次就卡住了。卡在了while((IFG2 & UCB0TXIFG)==0);   不晓得为什么啊。您能不能指导下我呢?我扣扣34555162
 
 
 

回复

1185

帖子

1

TA的资源

纯净的硅(高级)

14
 
感谢分享。
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(初级)

15
 
楼主厉害,改了后立马就调通了
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表