Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1268952
  • 博文数量: 160
  • 博客积分: 4132
  • 博客等级: 中校
  • 技术积分: 2086
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-06 21:56
文章分类

全部博文(160)

文章存档

2012年(25)

2011年(120)

2010年(15)

分类: 嵌入式

2010-11-10 18:28:31

SPI 调试-74HC595 数码管控制实验

摘自:http://blog.sina.com.cn/s/blog_530f95e90100fcpu.html

注意:要让S3C2440的一路SPI去控制外设,就必须把给nSSn外接一个上拉电阻!才能保证数据的正常传输。可以再找一个I/0口来控制74HC595的片选。

74HC595是8位串行输入转并行输出移位寄存器。74HC595引脚图!

SPI <wbr>调试-74HC595 <wbr>数码管控制实验SPI <wbr>调试-74HC595 <wbr>数码管控制实验

控制原理图:

SPI <wbr>调试-74HC595 <wbr>数码管控制实验

 

 

RCK也就是STCP ,在采集数据前要给RCK低电平,采集完信号要给高电平。

RCK(12脚):上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。通常我将RCK置为低电平,当移位结束后,在RCK端产生一个正脉冲(5V时,大于几十纳秒就行了。我通常都选微秒级),更新显示数据。

控制图程序:

void SPI_TEST(void)
{
int i;
U32 k;
 Uart_Printf("SPI COMMNICATION\n");
 Uart_Printf("SPI0 is master  ,SPI1 is  slave!\n");
 SPI_Init();
 rGPBCON = 0x15400;
 while(1)
 {
 for(i=0;i<19;i++)
 {
  rGPBDAT=0x00;
 while(!(rSPSTA0&0x01));
 rSPTDAT0=data[i];
 delay(1000);


rGPBDAT=0xFF;
delay(1000);
 }
 }
 Uart_Printf("\nthat's ok!\n");
}
void SPI_Init(void)
{
rGPECON=(2<<26)|(2<<24)|(2<<22);
rGPGCON=(3<<14)|(3<<12)|(3<<10)|(3<<6)|(1<<4);
rGPGUP&=0xFF13;
rGPEUP&=0xC7FF;
rSPPRE0=PCLK/2/ucSpiBaud-1;
rSPCON0=(0<<5)|(1<<4)|(1<<3)|(0<<2)|(0<<1)|(0<<0);
rSPPRE1=PCLK/2/ucSpiBaud-1;
rSPCON1=(0<<5)|(1<<4)|(0<<3)|(0<<2)|(0<<1)|(0<<0);
rSPPIN0=(0<<2)|(1<<1)|(0<<0);
rGPGDAT&=0xFFFB;

}
void delay(U32 dly)
{
U32 i;
for(;dly>0;dly--)
for(i=0;i<50000;i++);
}

同时可以把74HC595移出的数据用SPI读取

while(!(rSPSTA0&0x01));
k= rSPRDAT1;
Uart_Printf("RX %x\n",k);

入图

SPI <wbr>调试-74HC595 <wbr>数码管控制实验

 SPI <wbr>调试-74HC595 <wbr>数码管控制实验SPI <wbr>调试-74HC595 <wbr>数码管控制实验

阅读(3466) | 评论(0) | 转发(0) |
0

上一篇:[转]micro2440-linux-spi驱动

下一篇:数码管

给主人留下些什么吧!~~