ATMEL SAM4SD32C SSC总线数据收发配置详解
2013-08-19 22:37
302 查看
最近接触了ATMEL公司的一款基于ARM CORTEX M4的芯片SAM4SD32C,其中在配置SSC总线驱动的寄存器时,碰到了一个小小的麻烦,由于官方没有给出SSC控制器工作在从机模式的例子,所以只有对比着ASF框架给出的示例,修改SSC控制器的寄存器参数,但最后实际在示波器测量中,TD信号线上没有出现写入的数据。其中SSC总线控制器的信号引脚如下:
总线控制器的系统框图如下:
在了解了控制器关联的模块,查阅数据手册:
(1) 配置PIO引脚功能,这些引脚必须配置成SSC外设使用功能,具体可以参考数据手册的外设PIO配置一章内容。
(2)配置SSC的时钟,其中可以调用ASF框架中的PMC系统函数。
(3)如果需要SSC中断,那么可以使用NVIC接口配置中断优先级。
(4)配置SSC接受器和发送器的寄存器参数,包括时钟信号,同步信号,数据长度,高地位等。
(5)最后使能发送和接受,就基本完成配置了。
SSC控制器可以工作在SLAVE模式下,接收器(Receiver)和发送器(Transmit)的时钟由其他主设备提供,例如解码器,声码器等。接受器(Receiver)和发送器(Transmit)可以用同步模式,可以配置成两种模式:
<1>接受器(Receiver)的时钟使用发送器(Transmit)的时钟信号,当开始发送数据的时候,同时开始启动接受数据,就是同步方式收发数据。
<2>相反,同理,发送器(Transmit)可以使用接收器(Receiver)的时钟信号。
异步模式:接受器(Receiver)的时钟和发送器(Transmit)的时钟配置成外围主设备的时钟信号,工作在从机模式下。时钟最高频率不超过主频的一半。
例如,发送器配置寄存器SSC_TCMR寄存器的CKS位是选择时钟信号源的配置位,三种选择:
(1) 接收器的时钟。
(2) 主时钟的分频。
(3) TK引脚的时钟信号。
注意点:CKS位配置成TK信号当发送器时钟,CKO位配置成连续时钟信号是不允许的,否则,后果未知。时钟配置框图如下:
实际情况中,如果接收器和发送器都配置成外部时钟模式,即CKS位都设成2,那么就不会有数据收发,还得求助下谷歌,有人碰到了同样的问题,
http://www.at91.com/forum/viewtopic.php/f,15/t,18626/
When I first read the SSC section of the datasheet, I was very excited about the flexibility of the peripheral and all the new possibilities, since I have only worked with
smaller MCUs before. Little did I know that the described features do not work in all combinations, which not only limits that flexibility, but makes development extremely frustrating since the limitations are not documented. There is an errata section in
the datasheet that lists certain conditions that fail or work incorrectly, but it is in no way complete.
Be careful however with the macros AT91C_SSC_CKS_RK and AT91C_SSC_CKS_TK. THEY MUST BE REVERSED FOR THE TRANSMITTER. Check the numeric values: for the receiver its 0x01
to use TK and 0x02 to use RK. Its reversed for the transmitter, therefore the use of the macro must be reveresed as well.
下面是另外2篇同样碰到SSC配置问题的链接,有点启发:
http://www.embeddedrelated.com/groups/AT91SAM/show/1061.php http://www.ultimaserial.com/avr_lwip_tips4.html
总之,在数据手册没有写明白的情况下,多尝试不同的配置,多用谷歌搜索资料,才是王道。
总线控制器的系统框图如下:
在了解了控制器关联的模块,查阅数据手册:
(1) 配置PIO引脚功能,这些引脚必须配置成SSC外设使用功能,具体可以参考数据手册的外设PIO配置一章内容。
(2)配置SSC的时钟,其中可以调用ASF框架中的PMC系统函数。
(3)如果需要SSC中断,那么可以使用NVIC接口配置中断优先级。
(4)配置SSC接受器和发送器的寄存器参数,包括时钟信号,同步信号,数据长度,高地位等。
(5)最后使能发送和接受,就基本完成配置了。
SSC控制器可以工作在SLAVE模式下,接收器(Receiver)和发送器(Transmit)的时钟由其他主设备提供,例如解码器,声码器等。接受器(Receiver)和发送器(Transmit)可以用同步模式,可以配置成两种模式:
<1>接受器(Receiver)的时钟使用发送器(Transmit)的时钟信号,当开始发送数据的时候,同时开始启动接受数据,就是同步方式收发数据。
<2>相反,同理,发送器(Transmit)可以使用接收器(Receiver)的时钟信号。
异步模式:接受器(Receiver)的时钟和发送器(Transmit)的时钟配置成外围主设备的时钟信号,工作在从机模式下。时钟最高频率不超过主频的一半。
例如,发送器配置寄存器SSC_TCMR寄存器的CKS位是选择时钟信号源的配置位,三种选择:
(1) 接收器的时钟。
(2) 主时钟的分频。
(3) TK引脚的时钟信号。
注意点:CKS位配置成TK信号当发送器时钟,CKO位配置成连续时钟信号是不允许的,否则,后果未知。时钟配置框图如下:
实际情况中,如果接收器和发送器都配置成外部时钟模式,即CKS位都设成2,那么就不会有数据收发,还得求助下谷歌,有人碰到了同样的问题,
http://www.at91.com/forum/viewtopic.php/f,15/t,18626/
When I first read the SSC section of the datasheet, I was very excited about the flexibility of the peripheral and all the new possibilities, since I have only worked with
smaller MCUs before. Little did I know that the described features do not work in all combinations, which not only limits that flexibility, but makes development extremely frustrating since the limitations are not documented. There is an errata section in
the datasheet that lists certain conditions that fail or work incorrectly, but it is in no way complete.
Be careful however with the macros AT91C_SSC_CKS_RK and AT91C_SSC_CKS_TK. THEY MUST BE REVERSED FOR THE TRANSMITTER. Check the numeric values: for the receiver its 0x01
to use TK and 0x02 to use RK. Its reversed for the transmitter, therefore the use of the macro must be reveresed as well.
// configure ssc receiver
AT91C_BASE_SSC->SSC_RCMR = AT91C_SSC_CKS_TK | AT91C_SSC_START_TX;
AT91C_BASE_SSC->SSC_RFMR = SSC_DATLEN(16) | AT91C_SSC_MSBF | SSC_DATNB(1) | AT91C_SSC_FSOS_NONE;
// configure ssc transmitter
AT91C_BASE_SSC->SSC_TCMR = AT91C_SSC_CKS_RK | AT91C_SSC_START_FALL_RF | AT91C_SSC_CKI;
AT91C_BASE_SSC->SSC_TFMR = SSC_DATLEN(16) | AT91C_SSC_MSBF | SSC_DATNB(1) | AT91C_SSC_FSOS_NONE;
下面是另外2篇同样碰到SSC配置问题的链接,有点启发:http://www.embeddedrelated.com/groups/AT91SAM/show/1061.php http://www.ultimaserial.com/avr_lwip_tips4.html
总之,在数据手册没有写明白的情况下,多尝试不同的配置,多用谷歌搜索资料,才是王道。
相关文章推荐
- json与struts2进行数据交互配置详解
- Spring、MyBatis的整合数据映射器类(UserMapper->iocContext.xml)配置文件详解
- 数据总线、地址总线详解
- 大数据Spark “蘑菇云”行动Hadoop实战速成之路第29课:Hadoop架构详解及Hadoop集群搭建、配置和测试实战
- Windows+OpenLDAP+MySQL配置及使用详解(三)——LDAP数据的维护
- 详解ASP.NET Core实现强类型Configuration读取配置数据
- FLume监控文件夹,将数据发送给Kafka以及HDFS的配置文件详解
- 精华--ssm框架前后端使用AJAX传输json数据配置详解
- 汇编1-地址总线、数据总线与控制总线详解
- 地址总线、数据总线、控制总线详解
- MySql主从配置文件问题详解(数据不同步解决方案)
- 【STM32 IIC详解】stm32 IIC从机模式(中断方式收发数据)
- [转] 关于Struts-JSON配置(详解带实例struts2的json数据支持)
- AM335X平台下的mcspi源代码详解---中断模式下的初始化、收发数据
- Windows+OpenLDAP+MySQL配置及使用详解(三)——LDAP数据的维护
- 详解Mysql权限系统 2014-11-30 20:46:42| 分类: mysql |举报|字号 订阅 目录 1. 前言 2. Mysql账户权限安全 3. Mysql数据的网络安全配置
- Oracle数据可操作大全(五)(数据源配置图解详解)
- STM32F0xx_DMA收发USART数据配置详细过程
- MongoDB副本集配置系列十:MongoDB local库详解和数据同步原理
- springMVC利用FastJson接口返回json数据相关配置详解