42AVR单片机的主要内部资源与应用

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

§4.2AVR单片机的SPI接口一、SPI接口:串行外设接口SPI允许ATmega16和外设或其他AVR器件进行高速的同步数据传输。1、ATmega16SPI的特点如下:全双工,3线同步数据传输,SS#,SCK,MISO,MOSI;主机或从机操作LSB首先发送或MSB首先发送7种可编程的比特率传输结束中断标志写碰撞标志检测可以从闲置模式唤醒2、SPI工作过程主机和从机之间的SPI连接如下图所示。系统包括两个移位寄存器和一个主机时钟发生器。通过将需要的从机的SS#引脚拉低,主机启动一次通讯过程。主机和从机将需要发送的数据放入相应的移位寄存器。主机在SCK引脚上产生时钟脉冲以交换数据。主机的数据从主机的MOSI移出,从从机的MOSI移入;从机的数据从从机的MISO移出,从主机的MISO移入。主机通过将从机的SS#拉高实现与从机的同步。配置为SPI主机时,SPI接口不自动控制SS#引脚,必须由用户软件来处理。对SPI数据寄存器写入数据即启动SPI时钟,将8比特的数据移入从机。传输结束后SPI时钟停止,传输结束标志SPIF置位。如果此时SPCR寄存器的SPI中断使能位SPIE置位,中断就会发生。主机可以继续往SPDR写入数据以移位到从机中去,或者是将从机的SS#拉高以说明数据包发送完成。最后进来的数据将一直保存于缓冲寄存器里。配置为从机时,只要SS#为高,SPI接口将一直保持睡眠状态,并保持MISO为三态。在这个状态下软件可以更新SPI数据寄存器SPDR的内容。即使此时SCK引脚有输入时钟,SPDR的数据也不会移出,直至SS被拉低。一个字节完全移出之后,传输结束标志SPIF置位。如果此时SPCR寄存器的SPI中断使能位SPIE置位,就会产生中断请求。在读取移入的数据之前从机可以继续往SPDR写入数据。最后进来的数据将一直保存于缓冲寄存器里。SPI系统的发送方向只有一个缓冲器,而在接收方向有两个缓冲器。也就是说,在发送时一定要等到移位过程全部结束后才能对SPI数据寄存器执行写操作。而在接收数据时,需要在下一个字符移位过程结束之前通过访问SPI数据寄存器读取当前接收到的字符。否则第一个字节将丢失。工作于SPI从机模式时,控制逻辑对SCK引脚的输入信号进行采样。为了保证对时钟信号的正确采样,SPI时钟不能超过fosc/4。SPI使能后,MOSI、MISO、SCK和SS#引脚的数据方向将按照下表所示自动进行配置。3、SPI控制寄存器-SPCR(1)SPIE:使能SPI中断。置位后,只要SPI状态寄存器SPSR的SPIF位和状态寄存器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#.CPOL:时钟极性。CPOL=0,起始沿:上升沿,结束沿:下降沿;CPOL=1,起始沿:下升沿,结束沿:上降沿;CPHA:时钟相位。SPR1,SPR0:SPI时钟速率选择。确定主机的SCK速率,对从机没有影响。4、SPI状态寄存器-SPSRSPIF:SPI中断标志。串行发送结束后,SPIF置位。。进入中断服务程序后SPIF自动清零。或者可以通过先读SPSR,紧接着访问SPDR来对SPIF清零。WCOL:写碰撞标志。在发送当中对SPI数据寄存器SPDR写数据将置位WCOL。WCOL可以通过先读SPSR,紧接着访问SPDR来清零。SPI2X:SPI倍速。置位后SPI的速度加倍。若为主机则SCK频率可达CPU频率的一半。若为从机,最高只能保证fosc/4。数据寄存器-SPDR(八位):读/写寄存器,用来在寄存器文件和SPI移位寄存器之间传输数据。写寄存器将启动数据传输,读寄存器将读取寄存器的接收缓冲器。数据模式:相对于串行数据,SCK的相位CPHA和极性CPOL有4种组合。每一位数据的移出和移入发生于SCK不同的信号跳变沿,以保证有足够的时间使数据稳定。设置设置设置SPI主机模式下的写、读数据程序:.includem16def.inc.org$00rjmpmain.org$20main:ldir16,high(ramend)outsph,r16ldir16,low(ramend)outspl,r16clisbiddrb,4;ss#_pb4sbiddrb,5;mosi_pb5sbiddrb,7;sck_pb7cbiddrb,6;miso_pb6cbiportb,4sbiportb,6ldir16,0outspsr,r16;SPI速度不倍增ldir16,0b01010001;0x51,or$51outspcr,r16ldir16,0b10101010;0x55or$55,SPI要发送的数据outspdr,r16loop:inr16,spsr;读取发送状态sbrsr16,7;判断发送是否完成rjmploopinr16,spdrloop1:sbrsr16,7;判断接收是否完成rjmploop1inr16,spdr;读取数据wait:rjmpwait二、16位定时/计数器1(定时(事件管理)、波形产生和信号测量)1特点:真正的16位设计(即允许16位的PWM)2个独立的输出比较单元双缓冲的输出比较寄存器一个输入捕捉单元输入捕捉噪声抑制器比较匹配发生时清除寄存器(自动重载)无干扰脉冲,相位正确的PWM可变的PWM周期频率发生器外部事件计数器4个独立的中断源(TOV1、OCF1A、OCF1B与ICF1)2、C/T主要功能介绍(1)T/C时钟源:可以来自内部,也可来自外部,由位于T/C控制寄存器B(TCCR1B)的时钟选择位(CS12:0)决定。(2)计数器单元:16位T/C的主要部分是可编程的16位双向计数器单元。(3)输入捕捉单元:可用来捕获外部事件,并为其赋予时间标记以说明此时间的发生时刻。外部事件发生的触发信号由引脚ICP1输入,也可通过模拟比较器单元来实现。时间标记可用来计算频率、占空比及信号的其它特征,以及为事件创建日志。(4)输入捕捉触发源:输入捕捉单元的主要触发源是ICP1。T/C1还可用模拟比较输出作为输入捕捉单元的触发源。用户必须通过设置模拟比较控制与状态寄存器ACSR的模拟比较输入捕捉位ACIC来做到这一点。要注意的是,改变触发源有可能造成一次输入捕捉。因此在改变触发源后必须对输入捕捉标志执行一次清零操作以避免出现错误的结果。(5)噪声抑制器:通过一个简单的数字滤波方案提高系统抗噪性。它对输入触发信号进行4次采样。只有当4次采样值相等时其输出才会送入边沿检测器。(6)输出比较单元:16位比较器持续比较TCNT1与OCR1x的内容,一旦发现它们相等,比较器立即产生一个匹配信号。然后OCF1x在下一个定时器时钟置位。如果此时OCIE1x=1,OCF1x置位将引发输出比较中断。中断执行时OCF1x标志自动清零,或者通过软件在其相应的I/O位置写入逻辑1”也可以清零。根据WGM13:0与COM1x1:0的不同设置,波形发生器用匹配信号生成不同的波形。波形发生器利用TOP和BOTTOM信号处理在某些模式下对极值的操作。输出比较单元A的一个特质是定义T/C的TOP值(即计数器的分辨率)。此外,TOP值还用来定义通过波形发生器产生的波形的周期。(7)强制输出比较:工作于非PWM模式时,可以通过对强制输出比较位FOC1x写”1”的方式来产生比较匹配。强制比较匹配不会置位OCF1x标志,也不会重载/清零定时器,但是OC1x引脚将被更新,好象真的发生了比较匹配一样(COMx1:0决定OC1x是置位、清零,还是交替变化)。(8)写TCNT1操作阻止比较匹配:CPU对TCNT1寄存器的写操作会阻止比较匹配的发生。这个特性可以用来将OCR1x初始化为与TCNT1相同的数值而不触发中断。(9)比较匹配输出单元:比较匹配模式控制位COM1x1:0具有双重功能。波形发生器利用COM1x1:0来确定下一次比较匹配发生时的输出比较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:0控制输出是否应该在比较匹配发生时置位、清零,或是电平取反。(12)普通模式:为最简单的工作模式。在此模式下计数器不停地累加。计到最大值后(TOP=0xFFFF)由于数值溢出计数器简单地返回到最小值0x0000重新开始。在TCNT1为零的同一个定时器时钟里T/C溢出标志TOV1置位。此时TOV1有点象第17位,只是只能置位,不会清零。但由于定时器中断服务程序能够自动清零TOV1,因此可以通过软件提高定时器的分辨率。在普通模式下没有什么需要特殊考虑的,用户可以随时写入新的计数器数值。(13)CTC(比较匹配时清零定时器)模式:在CTC模式里OCR1A或ICR1寄存器用于调节计数器的分辨率。当计数器的数值TCNT1等于OCR1A(WGM13:0=4)或等于ICR1(WGM13:0=12)时计数器清零。OCR1A或ICR1定义了计数器的TOP值,亦即计数器的分辨率。这个模式使得用户可以很容易地控制比较匹配输出的频率,也简化了外部事件计数的操作。(14)快速PWM模式:可用来产生高频的PWM波形。快速PWM模式与其他PWM模式的不同之处是其单边斜坡工作方式。计数器从BOTTOM计到TOP,然后立即回到BOTTOM重新开始。对于普通的比较输出模式,输出比较引脚OC1x在TCNT1与OCR1x匹配时置位,在TOP时清零;对于反向比较输出模式,OCR1x的动作正好相反。由于使用了单边斜坡模式,快速PWM模式的工作频率比使用双斜坡的相位修正PWM模式高一倍。此高频操作特性使得快速PWM模式十分适合于功率调节,整流和DAC应用。高频可以减小外部元器件(电感,电容)的物理尺寸,从而降低系统成本。(15)输出的PWM频率可以通过如下公式计算得到:变量N代表分频因子(1、8、64、256或1024)。3.定时器/计数器1寄存器的说明(1)控制寄存器A-TCCR1ABit7:6–COM1A1:0:通道A的比较输出模式Bit5:4–COM1B1:0:通道B的比较输出模式COM1A1:0与COM1B1:0分别控制OC1A与OC1B状态。如果COM1A1:0(COM1B1:0)的一位或两位被写入1”,OC1A(OC1B)输出功能将取代I/O端口功能。此时OC1A(OC1B)相应的输出引脚数据方向控制必须置位以使能输出驱动器。OC1A(OC1B)与物理引脚相连时,COM1x1:0的功能由WGM13:0的设置决定。Bit3–FOC1A:通道A强制输出比较Bit2–FOC1B:通道B强制输出比较FOC1A/FOC1B只有当WGM13:0指定为非PWM模式时被激活。为与未来器件兼容,工作在PWM模式下对TCCR1A写入时,这两位必须清零。当FOC1A/FOC1B位置1,立即强制波形产生单元进行比较匹配。COM1x1:0的设置改变OC1A/OC1B的输出。注意FOC1A/FOC1B位作为选通信号。COM1x1:0位

1 / 35
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功