基于bf-537的常用通信接口实现ppt1

上传人:mg****85 文档编号:53532350 上传时间:2018-09-02 格式:PPT 页数:27 大小:1.93MB
返回 下载 相关 举报
基于bf-537的常用通信接口实现ppt1_第1页
第1页 / 共27页
基于bf-537的常用通信接口实现ppt1_第2页
第2页 / 共27页
基于bf-537的常用通信接口实现ppt1_第3页
第3页 / 共27页
基于bf-537的常用通信接口实现ppt1_第4页
第4页 / 共27页
基于bf-537的常用通信接口实现ppt1_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《基于bf-537的常用通信接口实现ppt1》由会员分享,可在线阅读,更多相关《基于bf-537的常用通信接口实现ppt1(27页珍藏版)》请在金锄头文库上搜索。

1、基于BF-537常用通信接口实现 作者:姚利 学号:02071195 指导老师:曹向海,论文主要结构:,DSP技术与DSP处理器的背景,BF-537的内核结构、存储器组织、中断事件的处理,对BF-537的常用通信接口(SPI口、SPORT口、UART口等)做详细介绍,以对UART0口驱动程序的编写来阐述如何编写常用通信接口的驱动程序,4,1,2,3,一:DSP处理器背景,数字信号处理作为信号和信息处理的一个分支学科,已渗透到科学研究、技术开发、工业生产、国防和国民经济的各个领域,取得了丰硕的成果。,数字信号处理器,是一种特别适合进行数字信号处理运算的微处理器。DSP芯片的出现和发展,促进数字信

2、号处理技术的提高,许多新系统、新算法应运而生,其应用领域不断拓展。随着DSP芯片性能的不断改善,用DSP芯片构造数字信号处理系统作信号的实时处理已成为当今和未来数字信号处理技术发展的一个热点。目前,DSP芯片已广泛应用于通信、自动控制、航天航空、军事、医疗等领域。,二:BF-537处理器的结构,1.结构框图,2.存储器结构,BF-537处理器把存储器视为一个统一的4GB的地址空间,使用32位地址。所以资源,包括内部存储器、外部存储器和I/O控制器,都占据公共地址空间的各自独立的部分。此地址空间的各部分存储器按分级结构排列,以提供高的性能价格比。一些非常快速、低延时的存储器的位置非常接近处理器,

3、而更大的低成本、低性能的存储器原理处理器,三:BF-537常用通信接口介绍,BF-537的常用通信接口有SPI口(串行外设接口)、SPORT口(同步串行口)、UART口等。,由于时间和篇幅的限制,这里就主要讲解一下UART口。,1.UART口概述:,BF537处理器提供2个全双工的通用异步接收/发送(UART)端口,UART0与UART1,它与PC标准的UART完全兼容。UART端口为其他外设或主机提供了一个简化的UART接口,支持全双工、有DMA能力的异步串行数据传输。UART端口支持5至8个数据位、1或2个停止位以及无校验、奇检验、偶校验位。,2.UART口遵循的通信协议,UART端口的波

4、特率、串行数据格式、错误代码的产生和状态、及中断均可编程:1.支持位速率每秒从( )到( )位。2.支持每帧7至12位的数据格式。3.发送和接收操作都可被配置为处理器能产生可屏蔽中断。 UART的时钟速率计算如下:,其中16位的UART_Divisor来自于DLH寄存器(高8位)和DLL寄存器(低8位)。,3.UART口的结构框图与寄存器,Blackfin的驱动编写主要包含三个部分,第一个就是设备本身的配置,需要配置其自身对应的寄存器以指定其参数;第二个需要配置设备对应的DMA通道,以提高DSP的工作效率,在数据传输时无需DSP核的参与;第三个就是设备的中断配置及中断服务程序,指定设备在完成数

5、据传输后要进行的操作,当然在具体使用的时候有可能不采用DMA方式和中断。下面以UART口为例说明具体的驱动编写流程,这里假设数据传输都采用DMA方式,且都配有中断服务程序。,四:BF-537接口驱动程序编写,4.1 设备本身配置的编写,4.1.1 PORT寄存器的设置,BF-537处理器有一组非常丰富的外设,处理器通过一种强大的引脚复用方案,给外部空间的应用提供了极大灵活性。因为Blackfin具有相当丰富的设备接口,而期间的管脚数又有限,所以很多设备是和GPIO口复用的。外设的引脚从功能组织上可分为Port F、Port G、Port H、Port J四种。其中UART0和UART1口引脚由

6、Port F控制;SPORT1口和PPI口引脚由Port G控制;SPORT0口由Port J控制。因此第一步需要利用PORTx_FER寄存器将相应的PF口配置成设备功能,并需要配置PORT_MUX寄存器,因为有些GPIO口并不仅仅是和一个设备共用,因此还需进一步指定具体是哪一种设备。,因此对于UARTO口在配置是应写为*pPORTF_FER=Ox0003,UART0口不与其他外设共用同一个引脚,因此编写UARTO口的PORT口寄存器时不需要编写PORT_MUX寄存器。,4.1.2接口自身寄存器的设置,简单的UART0口的寄存器的编写程序如下:void Init_uart0(void)*pUA

7、RT0_MCR = 0x0000; /关闭循环反馈模式*pUART0_LCR = 0x0083; /设置 UART_DLH、UART_DLL 寄存器为可写,无奇偶校验、1位停止位、8位数据位*pUART0_DLL = 0x0004; /设置波特率 *pUART0_DLH = 0x0000; /波特率等于115200*pUART0_LCR = 0x0003; /设置 UART_IER 寄存器为可写,无奇偶校验、1位停止位、8位数据位*pUART0_IER = 0x0000;,则 *pUART0_LCR = 0x0083; 所代表的意义为:使能UART0_DLH和UART0_DLL寄存器(第7位为

8、1);无奇偶校验(第5位为0);1位停止位(第2位为0);8位数据位(第0,1位为11)。,寄存器UART0_MCR是模式控制寄存器,全零表示关闭循环输出模式;寄存器UART0_DLL与寄存器UART0_DLH用作配置端口的波特率,寄存器UART0_IER是中断使能寄存器,在这里全置零的目的是关闭UART0口的中断直到端口的DMA通道使能。,Blackfin为每个设备都分配了默认的DMA通道,4.2 DMA通道的配置,以UART0口为例,看表可知,UART0口的发送为DMA9通道,UART0口的接收为DMA8通道。,UART0口的发送DMA配置为:void Uart0_dma_trans(ch

9、ar *start_addr,int x_count) *pDMA9_CONFIG = 0x00a0;*pDMA9_START_ADDR = start_addr;*pDMA9_X_COUNT = x_count;*pDMA9_X_MODIFY = 1;*pUART0_GCTL = 0x0001;*pDMA9_CONFIG = (*pDMA9_CONFIG | DMAEN);asm(“ssync;“); *pUART0_IER = (*pUART0_IER | ETBEI);asm(“ssync;“); ,DMA9_CONFIG寄存器的第7位置为1表明:工作完成时产生一个中断;第5位为1表示:

10、传输模式为同步传输模式;第4位为0表示一维DMA;第2、3位为0表示8位传输;第1位为0表示该DMA通道为发送操作;第0位为0表示没有使能该DMA通道。,在配置好DMA9通道后,要先使能UART0口,UART0_GCTL的第0位置1表示使能该UART0接口。然后要使能DMA9通道,即将DMA9_CONFIG中的第0位置为1;在以上程序中通过程序:*pDMA9_CONFIG=(*pDMA9_CONFIG | DMAEN)完成该操作。,4.3 中断的配置,4.3.1 首先用SIC_IMASK(系统中断屏蔽寄存器)打开接口所对应的系统中断:,SIC_IMASK是一个32位的寄存器,其32个位对应32

11、种不同设备的中断,当某一位为1时表示该位所代表的设备的中断使能,0则代表该位代表的设备的中断被屏蔽。,比如 UARTO口,在这个寄存器中有2位来控制UART0口的中断的使能,分别是:第11位:控制DMA8 Interrupt (UART0 RX),即控制了UART0口接收中断使能;第12位:控制DMA9 Interrupt (UART0 TX),即控制了UART0口传送中断使能;因此,在使用UART0口传送时,必须将SIC_IMASK中的第11,12位设置为1;即:*pSIC_IMASK=Ox00001800.,4.3.2 利用IMASK(内核中断屏蔽寄存器)打开对应的核中断:,在这里我们要先

12、指定设备的核中断,比如指定UART0口接收的核中断为ivg8,指定UART0口发送的核中断为ivg9。只要ivg8和ivg9没有被占用,就可以被指定。因此,UART0口的接收和发送的内核中断就对应IMASK寄存器中的第8位、第9位为1。即 0000,0001,1000,0000;*pIMASK=Ox0180.,SIC_IARx共有4个32位寄存器,分别为SIC_IAR0、SIC_IAR1、SIC_IAR2、SIC_IAR3;4个寄存器分别控制不同设备的系统中断分配。UART0口的系统中断分配被寄存器SIC_IAR1所控制。,4.3.3 使用核中断 利用SIC_IARx(系统中断分配寄存器)指定

13、该设备对应的核中断,SIC_IAR1的第12-15位控制分配 DMA Channel 8 (UART0 RX) 中断,前面定义了UART0口的接收中断级为 ivg8,8-7=1;因此第12-15位应填入 0001;同上,SIC_IAR1的第16-19位控制分配 DMA Channel 9 (UART0 TX)中断,前面定义了:UART0口的接收中断级为 ivg9,9-7=2;因此第16-19位应填入 0010;*pSIC_IAR1=Ox00021000;,中断服务程序的编写在C语言环境下需要首先利用系统提供的函数指定某个中断对应的中断服务程序入口:register_handler(ik_ivg8, UART0_RX_ISR);register_handler(ik_ivg9, UART0_TX_ISR);,三种中断服务程序配置完成,UART0口的中断寄存器及中断服务程序入口配置为:register_handler(ik_ivg8, UART0_RX_ISR);register_handler(ik_ivg9, UART0_TX_ISR);*pSIC_IMASK=Ox00001800;*pIMASK=Ox0180;*pSIC_IAR1=Ox00021000;,Thank you!,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号