打印

GPIO模拟SPI为什么没有波形

[复制链接]
2436|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jlinkv8|  楼主 | 2012-2-6 15:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用到SPI采集器件,因为SPI接口被用了,所以用GPIO模拟采集,因为没有采集到数据、工作不正常。就用示波器测,发现测不到波形。测CLK线 一直都是高电平。void Spi432OutByte( u8 d ) /* SPI out data */
{
  u8 i;
  for ( i = 0; i < 8; i ++ )  
  {
  at91_set_gpio_value(AT91_PIN_PB19, 0); /*clock set 0*/
udelay(1);
  if ( d & 0x80 ) at91_set_gpio_value(AT91_PIN_PB18, 1) ;
  else at91_set_gpio_value(AT91_PIN_PB18, 0) ;
  d <<= 1; /* 数据位是高位在前 */
  at91_set_gpio_value(AT91_PIN_PB19, 1); /* clock set 1 */
udelay(1);
  }
  at91_set_gpio_value(AT91_PIN_PB19, 0);/*clock set 0*/
}

u8 Spi432InByte( void ) /* SPI输入8个位数据 */
{
  u8 i, d;
  d = 0;
  for ( i = 0; i < 8; i ++ )  
  {
  at91_set_gpio_value(AT91_PIN_PB19, 0); /*clock set 0*/
udelay(1);
  d <<= 1; /* 数据位是高位在前 */
  if ( at91_get_gpio_value(AT91_PIN_PB17) ) d ++;
  at91_set_gpio_value(AT91_PIN_PB19, 1); /*clock set 0*/
  udelay(1);  
  }
  at91_set_gpio_value(AT91_PIN_PB19, 0); /*clock set 0*/
  return( d );
}

相关帖子

沙发
星辰yyt| | 2012-2-22 14:02 | 只看该作者
IO模拟的话,CLK线上的电平是IO端口直接给的高低电平,如果你正常给了但是没有波形出来,就看是不是IO端口的配置是不是正确的,直接写低能不能使CLK为低。

使用特权

评论回复
板凳
柠檬123| | 2012-3-2 15:07 | 只看该作者
请教问题!

使用特权

评论回复
地板
aozima| | 2012-3-7 13:44 | 只看该作者
SPI分时复用

使用特权

评论回复
5
haifan1234| | 2012-3-21 21:02 | 只看该作者
gpio口需要配置为输出,开漏。

使用特权

评论回复
6
lkl10800139| | 2012-3-28 01:44 | 只看该作者
学习了。

使用特权

评论回复
7
chhaich| | 2012-4-5 16:14 | 只看该作者
配置好IO口方向的就可以了,是否开漏没关系吧,开漏的话外面硬件还得加个上拉,直接用单片机内部的上拉就可以了。

使用特权

评论回复
8
klffnj| | 2012-7-11 21:08 | 只看该作者
大概
1. 功能选择要GPIO
2. 配置成输出
3.可能个别种芯片要使能
4.你的程序压根就没被执行
。。。。

使用特权

评论回复
9
cuicuijjy| | 2013-8-16 14:00 | 只看该作者
还有一种情况,有的cpu GPIO 做输出的时候是有相关gpio 控制器使能的,就是说当把数据写到gpio data 寄存器时,还要写另外一个寄存器,让数据发出去

使用特权

评论回复
10
飞鹰嵌入式| | 2013-8-20 18:05 | 只看该作者
GPIO设置有问题

使用特权

评论回复
11
jk101000| | 2014-3-12 00:21 | 只看该作者
按照datasheet上的上电时序,以及读写时序,检查一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

15

帖子

1

粉丝