SPI+HC165键盘输入

[复制链接]
4868|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,边沿和相位也相互调换过,还是不行,请高手指教,多谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| z_jzhao 发表于 2012-4-1 13:35 | 显示全部楼层
没有人知道吗?还是人气低
blacksword 发表于 2012-4-1 16:07 | 显示全部楼层
首先,不要怪人气低。

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

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

然后通过仿真器来调试你的代码。找到你认为哪几个地方可能存在问题。这样别可以很具体的帮你分析问题。
keken 发表于 2012-4-1 18:42 | 显示全部楼层
我是看不太懂
keken 发表于 2012-4-1 18:42 | 显示全部楼层
基本都是来学习的
kakio 发表于 2012-4-1 21:28 | 显示全部楼层
我觉人气还好吧
figi 发表于 2012-4-2 10:40 | 显示全部楼层
人气不低啊
figi 发表于 2012-4-2 10:41 | 显示全部楼层
版主说的很对呢
 楼主| z_jzhao 发表于 2012-4-5 11:46 | 显示全部楼层
硬上是没有问题的,这是一个产品上的显示模块,在其它的有软件的机器上试都是没问题的,我对比了一下波形,差别如图,都是用的28035,我无论怎么调软件,在发送数据时,SPISTEA的信号总的低电平,而且文档中也是这么定义的,但是我测试正常的机器,在发送数据时,SPISTEA信号为高平,但是不明白。

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
liqaz 发表于 2012-4-5 14:17 | 显示全部楼层
问题出来了,首先是要静下心来,自己找解决的方法        ,
一点一点的试呗
wolf330824 发表于 2012-4-7 14:33 | 显示全部楼层
我也遇上了,用103的芯片好用,同样的程序烧到100的芯片中遇上同样的问题,求教,谢谢!
qq759150783 发表于 2020-6-24 10:01 | 显示全部楼层
z_jzhao 发表于 2012-4-1 13:35
没有人知道吗?还是人气低

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

本版积分规则

21

主题

72

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部