原创 还是关于nios ii 下SPI 的问题

2011-4-21 09:01 4133 16 18 分类: FPGA/CPLD
前阵子在用SPI 总线做FPGA 与ARM 通讯,遇到了一个很怪的问题,ARM 作为主机,向FPGA 发送数据的时候,单个字节发送,FPGA 接收正常,连续发送的时候,就会混乱,对于这个问题,研究了很久,看了好几遍NIOS ii 下SPI 的资料,以及nios ii 的中断资料,发现我配置的也没有什么问题,单就是接收的数据不正常,用示波器看收发的波形,问题出在 FPGA 接收连续发送的数据的第二个字节上,当接收完第二个数据后,FPGA 的spi 中断服务程序,在退出中断后,又会反复进入中断,停不下来,单补调试观察status ienable ipeding 三个寄存器也是没有一点问题,是在是纠结,没有一点头绪,就想找Altera 技术支持,发现Altera 技术支持的方式非常麻烦,无奈,又一遍又一遍的看程序,下午的时候,突然想到了,换种对FPGA 寄存器的配置方式,之前的方式是在结构体中配置的,typedef struct{ 

    volatile unsigned long int RXDATA; 

    volatile unsigned long int TXDATA; 

    union{ 
        struct{ 
            volatile unsigned long int NC       :3; 
            volatile unsigned long int ROE      :1; 
            volatile unsigned long int TOE      :1; 
            volatile unsigned long int TMT      :1; 
            volatile unsigned long int TRDY     :1; 
            volatile unsigned long int RRDY     :1; 
            volatile unsigned long int E        :1; 
            volatile unsigned long int NC1      :23;         
        }BITS; 
        volatile unsigned long int WORD; 
    }STATUS; 

    union{ 
        struct{ 
            volatile unsigned long int NC       :3; 
            volatile unsigned long int IROE     :1; 
            volatile unsigned long int ITOE     :1; 
            volatile unsigned long int NC1      :1; 
            volatile unsigned long int ITRDY    :1; 
            volatile unsigned long int IRRDY    :1; 
            volatile unsigned long int IE       :1; 
            volatile unsigned long int NC2      :1; 
            volatile unsigned long int SSO      :21; 
        }BITS; 
        volatile unsigned long int CONTROL; 
    }CONTROL; 

    unsigned long int RESERVED0; 
    unsigned long int SLAVE_SELECT; 

}SPI_ADC_T; 

#define SPI_ADC          ((SPI_ADC_T *) SPI_ADC_BASE)//SPI_ADC_BASE是在system.h里产生的地址

这是在网上看到一个高手写的,我个人觉得也不不错,就用上了,

下午实在没办法的时候,想到了,直接用altera_avalon_pio_reg.h 这个头文件里面定义的方式

类似这种结构 IOWR_ALTERA_AVALON_PIO_EDGE_CAP(base, data)

这个问题才终于解决了,



PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户421377 2012-9-6 15:48

呵呵 有时候简单的方法 反而效果好啊 之前也看到有人说用结构题好

用户1621526 2012-5-16 10:51

很好
相关推荐阅读
用户248376 2013-04-03 09:47
两个0.1uf 电容造成的两个BUG
近期碰到两个BUG ,一个是我自己造成的,一个是帮别人解决的,都是跟0.1uf 电容有关 第一个BUG ,是在调试单线CAN 的时候遇到的,由于项目需求中有单线CAN 功能,于是找代理推荐了一...
用户248376 2013-03-29 12:18
思维与表达
思维的速度总是快过表达思路的整理,大脑中想法一闪而过,总是想不出表达的语言, 整理一下,这段时间的思路,今天头脑里面突然冒出了“ 温水煮青蛙”这个想法,或许是目前现状吧,在一个公司呆久了,最初...
用户248376 2013-03-06 14:05
看似一个小问题,
    单线CAN的波形问题今天总算结束,用一句话总结便是,世间本无事庸人自扰之 好久未写博客,今天特有感慨,算是记录一下 用的是ON 的NCV7356,从周立功技术支持那里获得基本原理图...
用户248376 2011-08-08 14:00
dxp 使用小结
 最近一段时间一直在画板子,似乎有无穷无尽的板子,到今天应该算是最后两块投出去了,能稍稍喘口气,protel dxp 是从我大学二年级开始学的,到今天算算已经四年了,以前用都是小打小闹,囫囵吞枣,能搞...
用户248376 2011-07-08 16:52
好文章转载
RO段、RW段和ZI段 --Image$$??$$Limit 含义---实例//------------------------------------------------------------...
用户248376 2011-06-14 14:41
无聊的调试记录
看了一个星期的wifi资料,依然没有一点头绪,发出地址后接受到的依然只有FF静下心来,写篇日志算是整理整理思路手上有好几个文档,但是没有一个是针对我这种裸机调试的,没办法一点一点看,在第一手册里面,4...
EE直播间
更多
我要评论
2
16
关闭 站长推荐上一条 /3 下一条