打印

SPI+HC165键盘输入

[复制链接]
3880|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
z_jzhao|  楼主 | 2012-3-30 13:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
原理图见附件,
程序如下:
void main(void)
{
   Uint16 sdata;  // send data
   Uint16 rdata;  // received data
.................
   spi_fifo_init();          // Initialize the Spi FIFO
   spi_init();                  // init SPI
// Step 5. User specific code:
// Interrupts are not used in this example.
   sdata = 0x0000;                                                        
   for(;;)
   {   
     spi_xmit(sdata);     // 传送数据
     DELAY_US(5000);        
     // 等待直到接收到数据
     while(SpiaRegs.SPIFFRX.bit.RXFFST !=1) { } //监测RXFFST=1表示有接收数据                        
     rdata = SpiaRegs.SPIRXBUF;        //但是rdata 总是为0,执行此步后,RXFFST被清0
     sdata++;
   }
}

void spi_init()
{   
    SpiaRegs.SPICCR.all =0x0F;       //0000 1111 禁用SPI环路,上升沿, 16位字符长度  
    SpiaRegs.SPICTL.all =0x07;       //0000 0111 主控制,使能数据发送,中断使能                        

SpiaRegs.SPIBRR =100;
    SpiaRegs.SPICCR.all =0x008F;      // Relinquish SPI from Reset   
    SpiaRegs.SPIPRI.bit.FREE = 1;     // Set so breakpoints don't disturb xmission
   
    SpiaRegs.SPICCR.bit.CLKPOLARITY=1;            //CLK下降沿将输入数据锁存
   // SpiaRegs.SPICCR.bit.CLKPOLARITY=0;          //CLK上升沿将输入数据锁存
   SpiaRegs.SPICTL.bit.CLK_PHASE=0;               //无延时
   //SpiaRegs.SPICTL.bit.CLK_PHASE=1;             //延迟半个周期
}
void spi_xmit(Uint16 a)
{
    SpiaRegs.SPITXBUF=a;
}   
void spi_fifo_init()                                                                                
{
// Initialize SPI FIFO registers
    SpiaRegs.SPIFFTX.all=0xE040;
    SpiaRegs.SPIFFRX.all=0x2044;
    SpiaRegs.SPIFFCT.all=0x0;
}  
此原理图还有一部分连接HC595和数码管,发送到数码管的数据可以正常显示,但是键盘输入却无法接收,监测
RXFFST=1,而且也会产生接收RXFFINT=1,但接收的数据rdata 总是为0,如果打开SPI环路返回,可正常接收数据;
关闭环路就接收为0,边沿和相位也相互调换过,还是不行,请高手指教,多谢! SPI-165.rar (16.4 KB)

相关帖子

沙发
z_jzhao|  楼主 | 2012-4-1 13:35 | 只看该作者
没有人知道吗?还是人气低

使用特权

评论回复
板凳
blacksword| | 2012-4-1 16:07 | 只看该作者
首先,不要怪人气低。

没有人有大量的时间来帮你看源码。

作为一个搞过电子的工程师,我建议你,先找个示波器,看一下,当你按下按键是在SPI的相应管脚上量一下信号有没有通过HC165的SPI接口发出来。这样你就可以定位是软件问题,还是硬件问题。

然后通过仿真器来调试你的代码。找到你认为哪几个地方可能存在问题。这样别可以很具体的帮你分析问题。

使用特权

评论回复
地板
keken| | 2012-4-1 18:42 | 只看该作者
我是看不太懂

使用特权

评论回复
5
keken| | 2012-4-1 18:42 | 只看该作者
基本都是来学习的

使用特权

评论回复
6
kakio| | 2012-4-1 21:28 | 只看该作者
我觉人气还好吧

使用特权

评论回复
7
figi| | 2012-4-2 10:40 | 只看该作者
人气不低啊

使用特权

评论回复
8
figi| | 2012-4-2 10:41 | 只看该作者
版主说的很对呢

使用特权

评论回复
9
z_jzhao|  楼主 | 2012-4-5 11:46 | 只看该作者
硬上是没有问题的,这是一个产品上的显示模块,在其它的有软件的机器上试都是没问题的,我对比了一下波形,差别如图,都是用的28035,我无论怎么调软件,在发送数据时,SPISTEA的信号总的低电平,而且文档中也是这么定义的,但是我测试正常的机器,在发送数据时,SPISTEA信号为高平,但是不明白。

注:图片中橙色的线为SPICLKA,绿色的为SPISTEA

SPISTEA(正常).zip

60.31 KB

SPISTEA(调试中).zip

28.49 KB

使用特权

评论回复
10
liqaz| | 2012-4-5 14:17 | 只看该作者
问题出来了,首先是要静下心来,自己找解决的方法        ,
一点一点的试呗

使用特权

评论回复
11
wolf330824| | 2012-4-7 14:33 | 只看该作者
我也遇上了,用103的芯片好用,同样的程序烧到100的芯片中遇上同样的问题,求教,谢谢!

使用特权

评论回复
12
qq759150783| | 2020-6-24 10:01 | 只看该作者
z_jzhao 发表于 2012-4-1 13:35
没有人知道吗?还是人气低

您好,看见您发的帖子求助关于spi键盘按键以后接收不到数据的问题,想问您是如何解决的,我遇见和您一样的问题,很苦恼,恳请指点一下,谢谢!

使用特权

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

本版积分规则

21

主题

72

帖子

0

粉丝