HD64570 使用小计
2011-08-19 17:14
211 查看
有关64570的介绍网上很多,可以自行google,下面是我用64570实现的SDLC协议程序一些总结.
所使用到的主要寄存器
MD0:发送协议,CRC校验
MD1:HDLC协议中地址配置
MD2:全双工,数据编码
RXS:接收时钟
TXS
TMC:和TXS中的BR一起配置波特率的值
SA0:
SA1:地址设定,这个主要是在接收数据的时候,如果地址不相同,那么芯片会将这一帧的数据丢弃。在发送数据的时候,芯片不会自动的将SA0 SA1发送出去,需要将SA0和SA1当做普通数据一样发送出去
TRC0:当FIFO中的数据字节数小于等于TRC0,那么ST0中的TXRDY会自动变成1。
TRC1:当FIFO中的数据字节数大于TRC1+1,那么ST0中的TXRDY会自动变成0。
RRC:当FIFO中的数据大于RRC时,ST0中的RXRDY会变成1。
CMD:命令配置,包括寄存器复位,允许发送,接收。等
发送流程:发送数据时,首先CMD写21,复位寄存器,然后配置上面提到的寄存器,然后CMD写02,此时便可以进行发送。首先读取ST0中TXRDY,当其为1时,可以发送数据(往TRBL写数据),当发送数据总的字节数等于规定的字节数时,需要判断ST3中的第0位,表示当前发送缓冲器中的数据是否已经全部发送出去,如果已经全部发送出去,便可进行下一次发送,注意,64570如果要再次发送数据,必须需要重新配置(可能应该是CMD写02即可,但是在我的程序里,重新配置比较容易)。
接收流程:接收数据时,首先CMD写21,复位寄存器,然后配置上面提到的寄存器,然后CMD写12,便可进行数据接收。首先读取ST0中的RXRDY,当其为1时,表示可以接收数据,每接收一字节数据后,最好先读CST0,看当前数据是否接收完毕,如果没有再去查询ST0,重复,直到CST0表示数据接收完毕,这样做的好处是可以接收任意长度的数据,而不用事先定义接收字长。
还可能用到的寄存器:ST2或FST,里面有一位是CRC校验位,表明当前接收的数据CRC校验是否出错。
附录是我编写的程序实现的功能:使用Altera Cyclone EP1C6Q240,Quartus8.0,Verilog
1 发送格式是SDLC协议,带地址和CRC校验 即
7E SA0 SA1 DATA CRC 7E
2 控制命令字用来控制接收或发送切换,包括:①只接受②只发送③先接受再发送④先发送再接收
3 超时判断,当数据发送出去后,如果对方在规定时间内没有返回数据或CRC校验错误,重发一次,如果三次都没有成功,则提示超时或者是CRC错误。
4 由于64570有两个通道,本程序使用通道0作发送,通道1作接收,如果在板子上将通道0的TXD和通道1的RXD,TXC和RXC连在一起,那么发送出去的数据直接可以在通道1接收到。
5 配置参数以mif文件的形式初始化在ROM中,更改时直接修改mif文件即可。
6 发送数据可以通过in-system memory直接编辑,接收到的数据也可以通过in-system memory查看,控制命令字,启动发送,发送数据长度都可直接在in-system memory中修改。
工程打包 自行将zip格式改成rar格式
所使用到的主要寄存器
MD0:发送协议,CRC校验
MD1:HDLC协议中地址配置
MD2:全双工,数据编码
RXS:接收时钟
TXS
TMC:和TXS中的BR一起配置波特率的值
SA0:
SA1:地址设定,这个主要是在接收数据的时候,如果地址不相同,那么芯片会将这一帧的数据丢弃。在发送数据的时候,芯片不会自动的将SA0 SA1发送出去,需要将SA0和SA1当做普通数据一样发送出去
TRC0:当FIFO中的数据字节数小于等于TRC0,那么ST0中的TXRDY会自动变成1。
TRC1:当FIFO中的数据字节数大于TRC1+1,那么ST0中的TXRDY会自动变成0。
RRC:当FIFO中的数据大于RRC时,ST0中的RXRDY会变成1。
CMD:命令配置,包括寄存器复位,允许发送,接收。等
发送流程:发送数据时,首先CMD写21,复位寄存器,然后配置上面提到的寄存器,然后CMD写02,此时便可以进行发送。首先读取ST0中TXRDY,当其为1时,可以发送数据(往TRBL写数据),当发送数据总的字节数等于规定的字节数时,需要判断ST3中的第0位,表示当前发送缓冲器中的数据是否已经全部发送出去,如果已经全部发送出去,便可进行下一次发送,注意,64570如果要再次发送数据,必须需要重新配置(可能应该是CMD写02即可,但是在我的程序里,重新配置比较容易)。
接收流程:接收数据时,首先CMD写21,复位寄存器,然后配置上面提到的寄存器,然后CMD写12,便可进行数据接收。首先读取ST0中的RXRDY,当其为1时,表示可以接收数据,每接收一字节数据后,最好先读CST0,看当前数据是否接收完毕,如果没有再去查询ST0,重复,直到CST0表示数据接收完毕,这样做的好处是可以接收任意长度的数据,而不用事先定义接收字长。
还可能用到的寄存器:ST2或FST,里面有一位是CRC校验位,表明当前接收的数据CRC校验是否出错。
附录是我编写的程序实现的功能:使用Altera Cyclone EP1C6Q240,Quartus8.0,Verilog
1 发送格式是SDLC协议,带地址和CRC校验 即
7E SA0 SA1 DATA CRC 7E
2 控制命令字用来控制接收或发送切换,包括:①只接受②只发送③先接受再发送④先发送再接收
3 超时判断,当数据发送出去后,如果对方在规定时间内没有返回数据或CRC校验错误,重发一次,如果三次都没有成功,则提示超时或者是CRC错误。
4 由于64570有两个通道,本程序使用通道0作发送,通道1作接收,如果在板子上将通道0的TXD和通道1的RXD,TXC和RXC连在一起,那么发送出去的数据直接可以在通道1接收到。
5 配置参数以mif文件的形式初始化在ROM中,更改时直接修改mif文件即可。
6 发送数据可以通过in-system memory直接编辑,接收到的数据也可以通过in-system memory查看,控制命令字,启动发送,发送数据长度都可直接在in-system memory中修改。
工程打包 自行将zip格式改成rar格式
相关文章推荐
- Oracle 使用小计(2)
- 查询中使用列小计
- VirtualBox使用vboxmanage clonehd实现虚拟机克隆
- 使用sql语句直接生成带有’小计’,’合计’的数据集
- 使用Windows Azure HDInsight Service在云上压缩大数据
- Joda Time使用小计
- QQ空间HD(1)-UIPopoverController基本使用
- 安卓ViewPager使用注意小计
- rapidjson使用问题小计
- HD7 使用点滴
- 使用Windows Azure HDInsight Service在云上压缩大数据
- FusionInsight HD 客户端安装与使用
- VMProtect使用小计【一】
- 【Cocos2d-X(2.x) 游戏开发系列之三】最新版本cocos2d­2.0­x­2.0.2使用新资源加载策略!不再沿用-hd、-ipad、-ipadhd添加后缀方式
- 使用Windows Azure HDInsight Service在云上压缩大数据
- 使用EF操作Oracle数据库小计
- Oracle 使用分析函数实现小计合计
- MSMQ使用小计
- hd1004解法!!strcmp函数的发现和熟悉使用