《42avr单片机的主要内部资源与应用》由会员分享,可在线阅读,更多相关《42avr单片机的主要内部资源与应用(35页珍藏版)》请在金锄头文库上搜索。
1、n4.2 AVR单片机的SPI接口 n一、SPI接口:串行外设接口SPI 允许ATmega16 和 外设或其他AVR 器件进行高速的同步数据传输。 n1、ATmega16 SPI 的特点如下: n全双工,3 线同步数据传输, SS#,SCK,MISO,MOSI; n主机或从机操作 n LSB 首先发送或MSB 首先发送 n7 种可编程的比特率 n传输结束中断标志 n写碰撞标志检测 n可以从闲置模式唤醒 n2、SPI工作过程 n主机和从机之间的SPI 连接如下图 所示。 系统包括两个 移位寄存器和一个主机时钟发生器。通过将需要的从机的 SS# 引脚拉低,主机启动一次通讯过程。主机和从机将需 要发
2、送的数据放入相应的移位寄存器。主机在SCK 引脚上 产生时钟脉冲以交换数据。主机的数据从主机的MOSI 移 出,从从机的MOSI 移入;从机的数据从从机的MISO 移 出,从主机的MISO 移入。主机通过将从机的SS# 拉高实 现与从机的同步。 n 配置为SPI 主机时, SPI 接口不自动控制 SS# 引脚, 必须由用户软件来处理。 对 SPI 数据寄存器写入数据即 启动SPI 时钟,将8 比特的数据移入从机。传输结束后SPI 时钟停止,传输结束标志SPIF 置位。如果此时SPCR 寄存 器的SPI 中断使能位SPIE 置位,中断就会发生。主机可以 继续往SPDR 写入数据以移位到从机中去,
3、或者是将从机 的SS# 拉高以说明数据包发送完成。最后进来的数据将一 直保存于缓冲寄存器里。 配置为从机时,只要SS#为高,SPI 接口将一直保持 睡眠状态,并保持MISO 为三态。在这个状态下软件可以 更新SPI 数据寄存器SPDR 的内容。即使此时SCK 引脚有 输入时钟,SPDR 的数据也不会移出,直至SS 被拉低。一 个字节完全移出之后,传输结束标志SPIF置位。如果此时 SPCR寄存器的SPI中断使能位SPIE置位,就会产生中断请 求。在读取移入的数据之前从机可以继续往SPDR 写入数 据。最后进来的数据将一直保存于缓冲寄存器里。 n SPI 系统的发送方向只有一个缓冲器,而在接 收
4、方向有两个缓冲器。也就是说,在发送时一定 要等到移位过程全部结束后才能对SPI 数据寄存 器执行写操作。而在接收数据时,需要在下一个 字符移位过程结束之前通过访问SPI 数据寄存器 读取当前接收到的字符。否则第一个字节将丢失 。 工作于SPI 从机模式时,控制逻辑对SCK 引 脚的输入信号进行采样。为了保证对时钟信号的 正确采样, SPI 时钟不能超过fosc/4。 n SPI 使能后,MOSI、MISO、SCK 和SS#引脚 的数据方向将按照下表 所示自动进行配置。 n3、SPI 控制寄存器 SPCR (1)SPIE: 使能SPI 中断。置位后,只要SPI 状态寄存器 SPSR 的SPIF位
5、和状态寄存器SREG 的全局中断使能位I置位 ,就会引发SPI 中断。 (2) SPE: 使能SPI。SPE置位将使能SPI。进行任何SPI 操作之 前必须置位SPE。 (3) DORD: 数据次序。DORD 置位时数据的LSB 首先发送;否 则数据的MSB 首先发送。 (4) MSTR: 主/ 从选择。MSTR置位时选择主机模式,否则为从 机。如果MSTR为“1”,SS#配置为输入,但被拉低,则 MSTR 被清零,SPSR 的SPIF 置位。用户必须重新设置 MSTR 进入主机模式。所以,主机模式下,常用主机的SS# 控制从机的SS#. nCPOL: 时钟极性。CPOL=0, 起始沿:上升沿
6、 ,结束沿:下降沿;CPOL=1, 起始沿:下升沿, 结束沿:上降沿; nCPHA: 时钟相位。 SPR1, SPR0: SPI 时钟速率选择。确定主机的 SCK 速率, 对从机没有影响。 n4、SPI 状态寄存器 SPSR SPIF: SPI 中断标志。串行发送结束后,SPIF 置位。 。进入中断服务程序后SPIF自动清零。或者可以通过 先读SPSR,紧接着访问SPDR来对SPIF清零。 WCOL: 写碰撞标志。在发送当中对SPI 数据寄存器 SPDR写数据将置位WCOL。WCOL可以通过先读 SPSR,紧接着访问SPDR 来清零。 SPI2X: SPI 倍速。置位后SPI 的速度加倍。若为
7、主机 则SCK 频率可达CPU 频率的一半。若为从机,最高 只能保证fosc /4。 n数据寄存器 SPDR(八位):读/写寄存器,用 来在寄存器文件和SPI移位寄存器之间传输数据。 写寄存器将启动数据传输,读寄存器将读取寄存 器的接收缓冲器。 n数据模式:相对于串行数据, SCK 的相位CPHA 和极性CPOL有4 种组合。每一位数据的移出和移 入发生于SCK不同的信号跳变沿,以保证有足够 的时间使数据稳定。 设置 设置 设置 nSPI主机模式下的写、读数据程序: n.include m16def.inc n .org $00 n rjmp main n .org $20 nmain: ld
8、i r16,high(ramend) n out sph,r16 n ldi r16,low(ramend) n out spl,r16 n cli n sbi ddrb,4 ;ss#_pb4 n sbi ddrb,5 ;mosi_pb5 n sbi ddrb,7 ;sck_pb7 n cbi ddrb,6 ;miso_pb6 n cbi portb,4 n sbi portb,6 n ldi r16,0 out spsr,r16 ;SPI速度不倍增 ldi r16,0b01010001 ;0 x51,or $51 out spcr,r16 ldi r16,0b10101010 ;0 x55
9、or $55,SPI要发送的数据 out spdr,r16 loop: in r16,spsr ;读取发送状态 sbrs r16,7 ;判断发送是否完成 rjmp loop in r16,spdr loop1: sbrs r16,7 ;判断接收是否完成 rjmp loop1 in r16,spdr ;读取数据 wait: rjmp wait n二、16位定时/ 计数器1(定时( 事件管理)、波形产生和 信号测量) n1特点: n真正的16 位设计( 即允许16 位的PWM) n2 个独立的输出比较单元 n双缓冲的输出比较寄存器 n一个输入捕捉单元 n输入捕捉噪声抑制器 n比较匹配发生时清除寄存
10、器( 自动重载) n无干扰脉冲,相位正确的PWM n可变的PWM 周期 n频率发生器 n外部事件计数器 n4 个独立的中断源(TOV1、 OCF1A、OCF1B 与ICF1) n2、C/T主要功能介绍 n(1)T/C 时钟源:可以来自内部,也可来自外 部,由位于T/C控制寄存器B(TCCR1B) 的时钟选 择位(CS12:0) 决定。 n(2)计数器单元:16 位T/C 的主要部分是可编 程的16 位双向计数器单元。 n(3)输入捕捉单元:可用来捕获外部事件,并为 其赋予时间标记以说明此时间的发生时刻。外部 事件发生的触发信号由引脚ICP1 输入,也可通过 模拟比较器单元来实现。时间标记可用来
11、计算频 率、占空比及信号的其它特征,以及为事件创建 日志。 n(4)输入捕捉触发源:输入捕捉单元的主要触 发源是ICP1。T/C1 还可用模拟比较输出作为输入 捕捉单元的触发源。用户必须通过设置模拟比较 控制与状态寄存器ACSR 的模拟比较输入捕捉位 ACIC 来做到这一点。要注意的是,改变触发源有 可能造成一次输入捕捉。因此在改变触发源后必 须对输入捕捉标志执行一次清零操作以避免出现 错误的结果。 n(5)噪声抑制器:通过一个简单的数字滤波方案 提高系统抗噪性。它对输入触发信号进行4 次采 样。只有当4 次采样值相等时其输出才会送入边 沿检测器。 (6)输出比较单元:16位比较器持续比较TC
12、NT1与OCR1x的内容,一旦 发现它们相等,比较器立即产生一个匹配信号。然后OCF1x 在下一个 定时器时钟置位。如果此时OCIE1x = 1, OCF1x 置位将引发输出比 较中断。中断执行时OCF1x 标志自动清零,或者通过软件在其相应的 I/O位置写入逻辑1” 也可以清零。根据WGM13:0 与COM1x1:0 的不 同设置,波形发生器用匹配信号生成不同的波形。波形发生器利用 TOP 和BOTTOM 信号处理在某些模式下对极值的操作。 n输出比较单元A 的一个特质是定义T/C 的TOP 值( 即计数器的分辨率) 。此外, TOP 值还用来定义通过波形发生器产生的波形的周期。 (7)强制
13、输出比较:工作于非PWM 模式时,可以通过对强制输出比较 位FOC1x 写”1” 的方式来产生比较匹配。强制比较匹配不会置位 OCF1x 标志,也不会重载/ 清零定时器,但是OC1x 引脚将被更新, 好象真的发生了比较匹配一样(COMx1:0 决定OC1x 是置位、清零, 还是交替变化)。 (8)写TCNT1 操作阻止比较匹配:CPU对TCNT1寄存器的写操作会阻 止比较匹配的发生。这个特性可以用来将OCR1x初始化为与TCNT1 相 同的数值而不触发中断。 (9)比较匹配输出单元:比较匹配模式控制位COM1x1:0 具有双重功能。波形发生器利用COM1x1:0 来确定下一次 比较匹配发生时的
14、输出比较OC1x 状态; COM1x1:0 还控 制OC1x 引脚输出的来源。 (10)比较输出模式和波形产生:波形发生器利用 COM1x1:0 的方法在普通模式、CTC 模式和PWM 模式下 有所区别。对于所有的模式,设置COM1x1:0 = 0 表明比 较匹配发生时波形发生器不会操作OC1x 寄存器。 (11)工作模式工作模式:- T/C 和输出比较引脚的行为- 由波形发生模式(WGM13:0) 及比较输出模式(COM1x1:0) 的控制位决定。比较输出模式对计数序列没有影响,而波 形产生模式对计数序列则有影响。COM1x1:0 控制PWM 输出是否为反极性。非PWM 模式时COM1x1:
15、0控制输出是 否应该在比较匹配发生时置位、清零,或是电平取反。 n(12)普通模式:为最简单的工作模式。在此模式下计数 器不停地累加。计到最大值后(TOP = 0 xFFFF) 由于数值 溢出计数器简单地返回到最小值0 x0000 重新开始。在 TCNT1为零的同一个定时器时钟里T/C溢出标志TOV1置位 。此时TOV1有点象第17位,只是只能置位,不会清零。 但由于定时器中断服务程序能够自动清零TOV1,因此可 以通过软件提高定时器的分辨率。在普通模式下没有什么 需要特殊考虑的,用户可以随时写入新的计数器数值。 (13)CTC( 比较匹配时清零定时器)模式:在CTC 模式里 OCR1A 或ICR1 寄存器用于调节计数器的分辨率。当计数 器的数值TCNT1 等于OCR1A(WGM13:0 = 4) 或等于ICR1 (WGM13:0 = 12) 时计数器清零。OCR1A 或ICR1 定义了 计数器的TOP 值,亦即计数器的分辨率。这个模式使得用 户可以很容易地控制比较匹配输出的频率,也简化了外部 事件计数的操作。 n(14)快速PWM 模式:可用来产生高频的PWM 波形。 快速PWM模式与其他PWM模式的不同之处是其单边斜坡 工作方式。计数器从BOTT