NUC1xx系列是32位的内嵌ARM Cortex-M0核的微控制器 ,适用于工业控制和需要丰富的通信接口的应用领域。ARM Cortex-M0 内核最高运行50MHz。宽电压工作范围 由2.5V 至 5.5V。
1.ARM Cortex-M0 内核
Cortex-M0处理器是32位多级可配置的RISC处理器。它有AMBA AHB-Lite接口和嵌套向量中断控制器(NVIC),具有可选的硬件调试功能,可以执行Thumb指令,并与其它Cortex-M系列兼容。支持两种模式:Thread模式和Handler模式;异常时,系统进入Handler模式,复位时,系统进入Thread模式。
1)基本特性:
特征:系统支持小端(little-endian)数据访问,提供单指令32-bit 硬件乘法器。
NVIC:提供32个外部中断,具有4级中断优先级。有专用的不可屏蔽中断NMI。支持电平和脉冲中断触发。中断唤醒控制器WIC,支持极低功耗休眠模式。
调试:提供4个硬件断点,2个观察点,用于非侵入式代码分析的程序计数采样寄存器,单步向量捕获能力。
总线接口:提供简单的集成到所有系统外设和存储器的单一32位AMBA-3 ABH-Lite系统接口;支持DAP(Debug Access Port)的单一32位的从端口。
2)外部总线接口EBI
为节省外部设备与芯片的连接线,EBI支持地址总线与设备总线多路复用,且地址锁存使能信号ALE支持地址和数据周期的差别。
支持最大外部设备64KB(8位数据宽度)/128KB(16位数据宽度),支持可变的数据访问时间(tACC)、地址锁存使能时间(tALE)和地址保持时间(tAHD)。
EBI地址在0x6000 0000至0x6001 FFFF,总共内存空间为128KB,当系统申请的地址在EBI的内存空间,相应的EBI片选信号有效,EBI状态机工作。
芯片内的所有EBI信号通过MCLK同步,MCLK可以设置EBICON中的MCLKDIVN分频HCLK/32
2.系统管理器
1)系统复位
复位源包括:上电复位、复位脚(/RESET)上有低电平、看门狗复位、低压复位、欠压检测复位、Coretex-M0 单片机复位、系统复位。
系统复位和上电复位使整个芯片复位,包括外设。
2)系统电源
该器件的电源分为3类:a.由AVDD和AVSS提供的模拟电源,为模拟部分工作提供电压;b.由VDD和VSS提供的固定的2.5V的数字电源,用于数字操作和I/O引脚的内部稳压电源;c.VBUS提供给USB的电源,用于USB模块传输操作。
内部电压调节器输出LDO和VDD33,需要在相应的引脚上外接电容。
3)系统内存映射
NUC1xx 提供4G字节的寻址空间,NUC1xx系列仅支持小端数据格式,ROM、SRAM和控制寄存器统一编址。
4)系统定时器
Cortex-M0 包含一个24位系统定时器SysTick,使能后,定时器从SysTick 当前寄存器(SYST_CVR)的值向下计数到0,下一个时钟边缘,重新加载寄存器(SYST_RVR) 的值。当计数器减到0时,标志位COUNTFLAG置位,在读数时,清COUNTFLAG标志位。
5)嵌套向量中断控制器 (NVIC)
Cortex-M0 提供中断控制器,用于总体管理异常,NVIC和处理器内核紧密相连。
NVIC结构支持32(IRQ[31:0])4级离散中断优先级,当接受任何中断时,ISR的开始地址可从内存的向量表中取得,当开始地址取得时,NVIC将自动保存处理状态到栈中,包括以下寄存器“PC, PSR, LR, R0~R3, R12” 的值. 在ISR结束时, NVIC 将从栈中恢复相关寄存器的值,进行正常操作,因此花费少量时处理中断请求。向量表的基地址为0x00000000. 向量表包括复位后栈的初始值,所有异常处理器的入口地址. 向量号表示处理异常的先后次序。
6)系统控制寄存器
系统控制寄存器控制了Cortex?-M0的状态和操作模式,包括CPUID、Cortex?-M0中断优先级和Cortex?-M0电源管理。
3.时钟控制器
时钟控制器为芯片提供时钟源. 包括AMBA接口模块和所有外围设备时钟,时钟发生器由如下5个时钟源组成:一个外部 32KHz 晶振、一个外部 12MHz 晶振、一个可编程的 PLL FOUT(PLL 由 12M 和 22M组成)、一个内部 22MHz RC 振荡器、一个内部 10KHz 振荡器。
时钟源切换取决于寄存器HCLK_S(CLKSEL0[2:0]):
Cortex?-M0内核的SysTick时钟源可以选择CPU时钟或外部时钟(SYST_CSR[2]),如果使用外部时钟,SysTick时钟(STCLK)有5个时钟源,
该器件包含分频器,由16级2分频移位寄存器组成. 因此有16种分频选择从 Fin/21 到 Fin/216 ,其中 Fin 为输入到时钟分频器的时钟频率.
4.存储器
1)程序存储器
具有32K/64K/128K 字节的片上FLASH ROM ,用于存储程序代码(APROM),4kB 在系统编程 (ISP) 加载程序内存(LDROM),用于存储ISP引导代码,用户可以通过ISP/IAP更新FLASH中的程序,用户设置Config0以选择从AP_ROM或LD_ROM开始。对于64/32K 字节的器件, NUC1XX 系列为用户提供4k字节的数据FLASH用于存储一些应用所需的数据; 对于128k 字节的器件,数据flash与128K的程序内存共享,其开始地址是可配置的,由用户在Config1中定义. 用户可以根据其应用的需要来定义数据FLASH的大小。数据FLASH的基地址由DFBADR定义
2)数据存储器
4K/8K/16K 字节内建SRAM,支持9通道 PDMA 用于SRAM和周边设备的自动数据传输。
3)PDMA控制器
NUC100/NUC120系列包括直接存储器访问(PDMA)控制器,用于APB和存储器间的数据交换,具有 9 路DMA (外设-存储器 或存储器 -外设 或存储器-存储器) 通道,每路 PDMA 通道 (PDMA CH0~CH8), 在外设 APB IP和存储器间有一个字的数据缓冲器,每个通道可支持一个单项传输。
PDMA 运行通过软件轮流检测或接收到内部PDMA 中断, CPU可以识别PDMA运作的完成,PDMA 控制器可增加源和目的地址。对于源和目的地址而言,PDMA 控制器具有两种模式:increased和fixed模式。每个PDMA模拟通道没有先设定,因此用户需要通过设定PDMA_PDSSR0和 PDMA_PDSSR1先行配置每路的PDMA 通道。软件需使能DMA通道PDMA[PDMACEN] 并且写有效的源地址到PDMA_SARx寄存器、目的地址到PDMA_DSABx寄存器、传输计算数到PDMA_BCRx寄存器、以及设置DMA_CSRx PDMA[Trig_EN]触发。PDMA将继续传输直到PDMA_CBCRx为0。PDMA (外设-到-存储器、存储器-到-外设) 模式,DMA可以在外设APB IP (ex:UART,SPI,ADC….) 和Memory将传递数据。
硬件通道优先级:DMA通道0有最高优先级,通道n有最低优先级。
Low Density系列仅支持1个PDMA通道:
5.通用 I/O
有80个通用I/O引脚,可以和其他功能引脚共享。80个引脚分配在GPIOA, GPIOB, GPIOC, GPIOD 与 GPIOE五个口上,每个口最多16个引脚。每个引脚都是独立的,都有相应的寄存器来控制引脚模式与数据。I/O引脚上的I/O类型可由软件独立地配置为输入,输出,开漏或准双端模式. 所有的I/O引脚默认处于准双端模式。
可选的TTL/Schmitt触发输入,支持大电流驱动/灌入I/O模式。
1)输入模式
设置 GPIOx_OMD(PMDn[1:0]) 为00b,GPIOx port[n]为输入模式,I/O引脚为三态(高阻),没有输出驱动能力。GPIOx_PIN的值反映相当端口的状态。
2)推挽输出模式
设置 GPIOx_OMD(PMDn[1:0]) 为 01b,GPIOx port [n] 为输入模式,I/O支持数字输出功能,有source/sink电流能力. GPIO_DOUT 相应位的值被送到相应引脚上。
3)开漏输出模式
设置 GPIOx_OMD(PMDn[1:0]) 为 10b,GPIOx port [n]为开漏模式,I/O支持数字输出功能,仅有灌电流能力,需要一个外加上拉电阻驱动到高电平。
4)准双端模式
设置GPIOx_OMD(PMDn[1:0]) 为 11b,GPIOx port [n] 为准双端模式,I/O同时支持数字输出和输入功能,但source电流仅达数百uA. 要实现数字输入,需要先将GPIOx_DOUT 相应位置1, 准双端输出是80C51及其派生产品所共有的模式。准双端模式的source 电流能力仅有200uA到30uA(相应VDD的电压从5.0V到2.5V)
6.中断系统
NUC1xx 系列支持下表所列的异常模式. 与所有中断一样,软件可以对其中一些中断设置4级优先级. 最高优先级为“0”,最低优先级为“3”,所有用户可配置的优先级的默认值为“0”. 注意:优先级为“0”在整个系统中为第4优先级,排在“Reset”, “NMI” 与“Hard Fault”之后。
中断模式对应向量号为16-47,共32个中断。
响应中断时,处理器自动从向量表中取出ISR的起始地址,对于ARMv6-M, 向量表的基地址为0x00000000。向量表包括复位后栈的初始值,所有异常处理器的入口地址。
7.定时器
定时器模块包含4组32位定时器(包含一个8位预分频计数器,一个24位向上计数器),TIMER0~TIMER3 (TIMER0, TIMER1位于 AHB1 ,TIMER2 和 TIMER3 位于 AHB2);各通道有独立的时钟源,每个通道有5个时钟源选项。通过TDR(定时器数据寄存器)可读取内部24位向上计数器值
时间溢出周期= (定时器时钟周期) * (8位预分频值 + 1) * (24位 TCMP)
定时器控制器提供one-shot(单次触发模式)、period(周期触发模式)、toggle(可编程时钟输出)、持续计数模式和事件计数器模式;
1)单次触发模式
一旦定时器计数器的值达到TCMPR的值,且IE置1,则定时器中断位置位,产生中断信号并送到NVIC通知CPU,表明定时器发生溢出,定时器计数操作停止,该比较的操作仅进行一次。
2)周期触发模式
一旦定时器计数器的值达到TCMPR的值,定时器计数器的值返回计数初值并再次计数,如果IE置1,则定时器中断位置位,产生中断信号并送到NVIC通知CPU。
3)可编程时钟输出模式
一旦定时器计数器的值与TCMPR匹配,且IE置1,则定时器中断标志位置位,产生中断信号并送到NVIC通知CPU,相应toggle输出信号置1,定时器计数器的值返回到计数初值,定时器计数器重新计数,如果中断标志被软件清除,一旦定时器计数器的值再次与TCMPR匹配,则定时器中断标志为再次置位,产生中断信号并送到NVIC通知CPU,相应toggle输出信号置0;如此往复,产生占空比为50%的信号输出。
4)持续计数模式
产生中断信号的产生取决于TDR==TCMPR。定时器计数器的值与TCMPR匹配后,定时器计数器继续计数,而不返回计数初值,用户可以通过不断改变TCMPR值来实现计数或定时功能。
5)事件计数器
定时器计数器的时钟源TMRx_CLK必须设置为HCLK,可以通过设置TEXCONx[7]来使能或禁止TM0-TM3防抖动功能,以及设置TEXCONx[0]来设定TM0-TM3上升沿或下降沿计数。如果禁用计数防抖动,事件计数源频率频率必须小于1/3HCLK,如果使能计数防抖动,事件计数源频率必须小于1/8HCLK,
8.串行口
MCU提供3个UART通道,UART0支持高速,UART1~2支持普通速度,另外UART0与UART1支持流控制,UART0与UART1可以采用DMA控制器。
通用异步收/发器(UART) 在从外设收到数据的时候执行串到并的转换,在从CPU收到数据的时候执行并到串的转换。该串口同时支持LIN主机模式和 IrDA SIR 功能。有7 种类型的中断:发送FIFO 空中断(Int_THRE)、接收极限到达中断(Int_RDA)、线状态中断 (overrun error 或者校验错误或者framing error或者break 中断) (Int_RLS)、超时中断(Int_Tout)、MODEM 状态中断(Int_Modem) 、唤醒状态中断 (Int_WakeUp)和LIN 接收停止侦测中断。
UART0 接口控制器一个内嵌64-byte 发送FIFO (TX_FIFO) 和 64-byte 接收 FIFO (RX_FIFO) 来降低CPU的中断数量;UART1~2内嵌 16-byte 发送FIFO (TX_FIFO) 和16-byte (每个字节加3比特的错误数据) 接收FIFO (RX_FIFO) 来降低CPU的中断数量,UART包括一个可编程的波特率发生器,它可以将输入晶振除以一个除数来得到收发器需要的时钟. 波特率公式是 Baud Rate = UART_CLK / M * [BRD + 2]. 其中M和BRD在波特率分频寄存器UA_BAUD中定义。
UART0与UART1 控制器用 2 种low-level 信号, /CTS (clear-to-send)和 /RTS (request-to-send)支持自动流程控制功能。
UART 控制器提供 串行 IrDA (SIR, 串行红外) 功能 (用户需置位 UA_FUN_SEL[IrDA_EN] 使能 IrDA 功能),SIR 定义短程红外异步串行传输模式 1 开始位, 8 数据位, 和1 停止位. 最大数据速率 为 115.2 Kbps (半双工). IrDA SIR 包括 IrDA SIR 编码/解码协议。
UART 控制器具有LIN(局域网) 功能. LIN 模式提供设定LIN_EN bit 位 UA_FUN_SEL 寄存器. 在LIN 模式, 1 开始位 8 数据位和1 停止位相一致,同标准LIN 相同。
串口特性:可编程为5,6,7,8位的数据位,可编程奇偶校验或无校验,可编程为1,1.5,2位的停止位,
UART支持RS-485 9位模式功能,设置UA_FUN_SEL选择RS485模式;控制器可以配置成可寻址的从机模式,RS485发送可通过设置优先级(bit9)为1标志地址特性,对于数据特性,标志优先级为0;设置寄存器UA_LCR控制第9位(PBE,EPE和SPE置位,第9位发送0;PBE,SPE置位,EPE清零,第9位发送1)。
RS485自动地址识别模式:接收器在检测到地址字节(bit9 =1),并且地址字节数据与UA_RS_485[ADDR_MATCH]的值相匹配之前将忽略所有数据,地址字节数据将存储在RX_FIFO,所有接收字节数据将被接收并存储于RX_FIFO,直到地址字节或数据字节与UA_RS_485[ADDR_MATCH]的值不匹配。
RS485普通多点操作模式:流设置UART_FCR[RS485_RX_DIS]使能UA_RS_485[RS485_NMM],接收器会忽略数据,直到检测到地址字节(bit 9=1)并且地址字节数据存储到RX_FIFO;流禁止UART_FCR[RS485_RX_DIS],接收器将接收任何数据。
RS485编程流程:1)设置寄存器UA_FUN_SEL的FUN_SEL位选择RS485模式;
2)设置寄存器UA_FCR中的RX_DIS位使能或禁止RS485接收器;
3)设置RS_485_NMM模式或RS_485_AAD模式;
4)如果选择RS_485_AAD模式,AADR_MATCH设置成自动地址匹配值;
5)若为自动方向模式,设置R2_485_AUD;
9.实时时钟
时钟源由外部32.768KHz晶振提供,管脚为X32I 及X32O 或者外接32.768KHz 频率的信号源。RTC支持时间格式 (秒,分,时)寄存器(TLR)以及日历格式(日,月,年)寄存器(CLR)。数据格式由BCD格式存取。模块支持闹钟功能,(TAR)寄存器用于指示时间闹铃,(CAR)用于指示日期闹铃。
RTC 模块支持时间记步及闹钟中断,通过设定TTR.TTR[2:0],中断提供8级选择1/128, 1/64, 1/32, 1/16, 1/8, 1/4, 1/2 及1 秒。当 RTC 计数器内的值TLR 和CLR 与TAR和CAR相当时,会引发中断标志 (RIIR.AIF)。
基于RTC时钟与系统时钟采用不同的模块,用户对RTC寄存器写入后,必须等待2个RTC时钟周期(60us)后,寄存器内的值才会被更新。寄存器AER 位 15~0 作为RTC允许读/写密码,用于避免掉电时对RTC造成的误写,要访问RTC的寄存器AER,必须写入0xa965以打开访问限制,读写使能后,将会有效512个RTC时钟,之后自动关闭。
10.PWM发生器和捕捉定时器
1)PWM发生器
包含4组PWM发生器,可配置为8个独立的PWM输出,PWM0~PWM7,或4组互补的PWM对,带4个可编程的死区发生器。4组PWM发生器提供8个独立的PWM中断标志,当PWM向下计数周期达到零时触发中断。PWM发生器可以定义为单触发模式或连续输出PWM波形。
每组PWM发生器带有8位预分频,一个时钟除频提供5级时钟源(1, 1/2, 1/4, 1/8, 1/16),两个PWM定时器包括2个时钟选择,两个16位PWM向下计数计数器用于PWM period 周期控制,两个16位比较器用于PWM duty 周期控制以及死区发生。
当PCR.DZEN01置位, PWM0 与 PWM1形成互补的PWM周期,这一对PWM的周期、占空比和死区时间由PWM0定时器和死区发生器0决定;其他PWM互补对类似。
当16位向下计数计数器达到0时,中断请求产生。如果PWM定时器被定义为连续模式,当向下计数器达到0时,会自动重新导入设定值(CNRx)并从新开始运行下一个周期。如果定时器设为单触发模式,向下计数器停止计数,并产生中断请求。比较器数据用于设定脉宽,计数器控制逻辑在计数器计数到比较值时将PWM输出变高。
PWM period 和duty 控制由向下计数的PWM寄存器(CNR)以及PWM比较寄存器(CMR)控制。占空比 = (CMR+1)/(CNR+1).
PWM 频率 = PWMxy_CLK/(prescale+1)*(clock divider)/(CNR+1); xy代表01, 23, 45 或 67, 取决于所选择的PWM通道.
CMR >= 计数值: PWM 输出为高,反之PWM输出低;PWM低脉宽= (CNR-CMR) ; PWM高脉宽=(CMR+1)
PWM定时器具有双缓存功能。寄存器预先设定的值,在一个周期完成后,可以自动重载。PWM计数器值写入CNR0~7,并可从PDR0~7内读出;PWM 控制寄存器(PCR) 的CH0MOD 位定义PWM0是自动重载模式或是单触发模式。当PWM计数器计到0,MCU自动重载CNR0 值到PWM 计数器。双缓存允许CMR字当前运行时改写,下一个周期内值被导入运行。
PWM死区发生器,用于保护器件电源(这一特性用于在开关设备的断开和另一个开关设备的闭合之间插入一个时间缺口,使它们不会处于同时闭合的状态)。该功能产生可编程的延迟时间到PWM上升沿输出,用户通过编程PPRx.DZI确定死区间隔。
2)捕捉定时器
当PWM输出模块的输入捕捉功能使能,可同时用作捕捉功能。捕捉器0和PWM0使用同一个定时器,捕捉器1和PWM1使用另一组定时器,以此类推。在使用捕捉功能之前,必须预先配置PMW定时器。当输入信号有上升沿转变时,PWM计数器的值将存入CRLRx寄存器,当输入信号有下降沿转变时,PWM计数器的值将存入CFLRx寄存器。
设定CCR0[1] (上升沿触发中断有效)和CCR0[2](下降沿触发中断有效),可以使捕捉器通道0作为中断源。同样设定CCR0[17] 和CCR0[18],可以设定通道1。最大的捕捉频率由捕捉中断延迟决定,捕捉中断发生时,软件执行以下三步:a.读PIIR获取中断源;b.读CRLRx/CFLRx获取捕捉值和写
1清PIIR,如果中断延迟在T0完成,捕捉信号在(T0)间隔内必须不能变化,此条件下,捕捉频率最大为1/T0。
每当捕捉控制器触发捕捉中断时,相应的PWM计数器会同时重载CNRx的值,通道低脉宽为(CNR+1-CRLR);通道高脉宽为 (CNR+1-CFLR)。
3)PWM定时器及捕捉配置
PWM定时器开启步骤:
1. 配置时钟选择 (CSR)
2. 配置预分频(PPR)
3. 配置反向打开/关闭,死区打开/关闭,自动重载/单触发模式以及PWM定时器关闭 (PCR)
4. 配置比较器寄存器(CMR) 设定PWM 占空比.
5. 配置PWM计数器寄存器 (CNR) 设定PWM周期.
6. 配置中断使能寄存器 (PIER)
7. 配置PWM输出使能 (POE)
8. 配置相应的管脚GPIO (GPA_MFP)
9. 配置相应的管教到输出模式 (GPIOA_OMD)
10. 使能PWM定时器(PCR)
PWM定时器关闭步骤:
方式 1:设定16位向下计数计数器(CNR)为0,并查看PDR状态。当PDR达到0,关闭PWM定时器 (PCR的CHxEN位). (推荐)
方式2:设定16位向下计数计数器(CNR)为0,当中断条件发生。在中断内关闭PWM定时器(PCR的CHxEN位). (推荐)
方式3:直接关闭PWM定时器(PCR的CHxEN位). (不推荐,因为禁止CHxEN会立即停止PWM输出信号,导致PWM占空比改变,可能引起电机的损坏)
捕捉开始步骤:
1. 配置时钟选择(CSR)
2. 配置预分频(PPR)
3. 配置通道使能,上升/下降沿中断使能以及输入信号反向打开/关闭 (CCR0, CCR1)
4. 配置PWM计数器寄存器 (CNR)
5. 配置捕捉输入使能寄存器 (CAPENR)
6. 配置相应的GPIO管脚用于PWM功能 (GPA_MFP)
7. 配置相应的GPIO管脚于输入模式S (GPIOA_OMD)
8. 使能PWM定时器(PCR)
11.看门狗定时器WDT
看门狗定时器包含一个18位的自动运行的计数器,可编程其定时溢出间隔。设置WTE(WDTCR[7])使能看门狗定时器和WDT计数器开始计数. 当计数器达到选择的定时溢出间隔,看门狗定时器中断标志WTIF被立即置位,并请求WDT中断(如果看门狗定时器中断使能位WTIE置位),同时,紧接着会有一个指定周期(1024*Twdt)延时,用户必须在指定周期内设置WTR(WDTCR[0]) (看门狗定时器复位)为高,重置18位WDT计数器,防止CPU复位,WTR在WDT计数重置后自动由硬件清零。
通过设置WTIS(WDTCR[10:8])选择8个定时溢出间隔(2^4~2^18),如果在特殊延迟时间终止后,如果WDT计数没有被清零,看门狗定时将置位看门狗定时器重置标志(WTRF)为高并使CPU复位. 这个复位将持续63个WDT时钟,然后CPU重启,并从复位向量(0x0000 0000)执行程序,WTRF将不被看门狗复位清零,用户可用软件拉低WTFR。
12.模拟数字转换(ADC)
NUC1XX 系列包含 一个12-bit 8通道逐次逼近式 模拟 – 数字转换器 (SAR A/D converter)。A/D 转换器支持 三种操作模式: 单一、单周期扫描 和连续扫描模式。开始A/D 转换可软件设定和外部STADC/PB.8 pin开启。
当改变运行模式或模拟输入通道使能时, 为了防止错误的操作, 软件需清 ADST 位为 0 (ADCR register). A/D 转换将停止 并进入idle 模式.
A/D转换器有3个中断源:A/D 转换结束时ADF(ADSR寄存器)位被置1;当A/D转换结果同ADCMPR0/1寄存器设定值相匹配时,CMPF0/1会被置1;当ADF、CMPF0、CMPF1其中一个标志被置1,且其相应的ADIE 位(ADCR 寄存器)及CMPIE(ADCMPR0/1寄存器)置1时,将产生 ADINT 中断请求。
1)特征
模拟输入电压: 0~Vref (Max to 5.0V).
12位分辨率和10位精确度保证。
多达 8 路单端模拟输入通道或4路差分输入。
最大 ADC 时钟频率 16MHz/20MHz。ADC时钟频率= (ADC clock source frequency) / (ADC_N+1);
高达600K/1M SPS 转换速率, 转换时间少于 1us.
转换结果可和指定的值相比较 当转换值和设定值相匹配时,用户设定产生中断请求.
通道7支持3输入源:外部模拟电压, 内部基准电压和内部温度传感器输出.
支持自身校正功能减少转换的误差,用户可写1到CALEN 位(ADCALR 寄存器)使能自身校正功能, 当内部校正完成CAL_DONE为高。
2)单触发模式
在单触发模式下, A/D 转换仅仅在指定的单一通道中执行一次,运作流程如下:
1. 当 ADCR 的ADST 置位开始A/D 转换,可通过软件或外部触发输入.
2. 当 A/D 转换完成,转换值将存储在与通道相对应的A/D数据寄存器中.
3. A/D 转换完成, ADSR 的ADF 位置位. 若此时ADIE 位置位, 将产生ADINT 中断请求.
4. A/D 转换期间,ADST 位维持为1,A/D 转换结束,ADST 位自动清 0,A/D 转换器进入idle 模式。ADST清0后,至少要等一个ADC时钟,才能再将ADST位置1,否则A/D 转换器可能无法运作。
3)单周期扫描模式
在单周期模式下,ADC会对所有指定的通道进行一次采样和转换,且从编号最小的通道开始运作,具体流程如下:
1. 软件置位 ADCR 寄存器的ADST 位或外部触发输入置位, A/D 转换从最小编号的通道开始。
2. 每路 A/D 转换完成后, A/D 转换数值将装载到相应数据寄存器中。
3. 当被选择的通道数都转换完成后,ADF 位(ADSR 寄存器)置位。若此时 ADIE 置位, 将产生 ADINT 中断请求。
4. A/D 转换结束, ADST位自动清0,A/D 转换器进入idle 模式。若在转换过程中ADST被清0,则无法保证存储在数据寄存器中的值之正确性。ADST清0后,至少要等一个ADC时钟,才能再将ADST位置1,否则A/D 转换器可能无法运作。
4)连续转换模式
在连续模式下, 可通过设定CHEN 位 ADCHER 寄存器 (maximum 8 channels for ADC) 使能 A/D 转换.运作流程如下:
1. 软件置位 ADCR 寄存器的 ADST 位或外部触发输入置位, A/D 转换从最小编号的通道开始。
2. 每路 A/D 转换完成后, A/D 转换数值将装载到相应数据寄存器中.
3. 当所有被使能的通道数依序完成一次A/D转换后,ADF位(ADSR 寄存器)置位。若此时 ADIE 置位,将产生ADINT中断请求,当 A/D 转换完成后. 使能的最小编号通道将开始新的转换。
4. 只要ADST保持 1,就重复步骤2 ~ 3。当 ADST 位清 0, A/D 转换将停止,但无法保证最小通道使能通道的转换结果之正确性。
5)比较模式下的A/D转换结果监控
ADC控制器提供2组比较寄存器 ADCMPR0和ADCMPR1监控 A/D 转换模块的2路转换结果值。可通过软件设定CMPCH[2:0] 来选择监控那路通道,而CMPCOND 位被用来检查转换值小于或大于等于CMPD[11:0]指定值,当CMPCH指定的通道转换完成时,比较行为将会被自动的触发一次,当比较结果与设定值匹配,比较计数器将加1,否则比较计数器清0。当计数器的值与(CMPMATCNT+1)匹配,CMPF位将置1,将产生ADINT中断请求。在扫描模式下软件可应用于监控外部模拟输入pin脚电压变化。
6)外设DMA 请求
当 A/D 转换完成,结果装载到ADDR 寄存器且VALID 置位。如果ACDR寄存器PTEN位置位, ADC控制器将产生PDMA请求(P_nDRQ) ,以便用户将数据传输到用户指定的内存空间,而无需CPU参与。不管选择哪个通道,PDMA操作的源地址都是ADPDMA。如果ADC工作在单周期或连续扫描模式,当PDMA传输转换结果时,ADC将继续转换选择的下一通道,用户可通过读ADPDMA监控当前PDMA传输数据。
13.模拟比较器CMP
NUC1XX 系列包括2 路模拟比较器,当正级输入大于负极输入(可选择内部参考电压)时,比较器输出为逻辑1,反之为逻辑 0;每一路比较器可配置成:当输入值发生改变时产生中断。软件可 写 0 到 CMP0 位 CMPF1 以停止中断请求。2路模拟比较器共用同一个中断请求。
14.USB设备控制器
NUC1xx系列包含一组全速USB 2.0 设备控制器和收发器,符合USB 2.0规范,支持control/bulk/interrupt/isochronous 传输类型。
在该设备控制器里,包含2个主接口:APB总线和由USB PHY收发器出来的USB总线,CPU通过APB总线编程控制寄存器,在该控制器内置有512字节的SRAM作为数据缓存。输入或输出传输,需要通过AHB从接口或SIE向SRAM写数据或从SRAM读数据。用户需要通过BUFSEGx为每个端点缓存设置有效的SRAM地址。在USB功能有效前,用户需要在缓冲段寄存器配置每个端点的有效起始地址(地址范围0x4006 0100-0x4006 02ff)。
USB设备控制器具有6个可配置的端点,每个端点可配置为IN或OUT类型。所有的操作包括control,bulk,interrupt,isochronous传输都由断点模块来执行。端点控制模块还可以用来管理数据同步时序,端点状态控制,当前起始地址,当前事务状态和每个端点的数据缓存状态。
该控制器提供1个中断向量、4个不同的中断事件,包括唤醒功能、设备插拔事件、USB事件(如IN ACK,OUT ACK等)和BUS事件(如suspend和resume等),用户需要在中断事件状态寄存器(USB_INISTS)检查相关事件标志以得知发生何种中断,然后检测相关USB端点状态寄存器(USB_EPSTS)以得知该端点上发生何种事件。总线中断告之用户一些总线事件,如USB复位、中止、暂停、恢复,用户可以读特殊功能寄存器“ATTR”获取总线事件。
USB设备有一个软件禁用功能,用于模拟设备没有跟主机相连的情况。
SIE是设备控制器的前端,处理最多的USB 协议包。处理功能包括:
- 包识别,处理时序
- SOP, EOP, RESET, RESUME信号检测/产生
- Clock/Data分离
- NRZI 数据编解码与比特填塞(bit-stuffing)
- CRC产生和校验 (for Token and Data)
- Packet ID (PID) 产生和校验/解码
- 串-并/并-串转换
数字锁相环DPLL:USB数据的比特率为12MHz, DPLL采用的48MHz的频率由时钟控制器产生,锁定RXDP与RXDM的输入数据,12MHz的比特率时钟也是由DPLL转换来的。
插拔去抖动:USB设备可以进行热插拔操作,为了监测USB设备被拔出的状态,设备控制器提供了硬件去抖动以防止在USB插拔时产生的抖动问题,悬空检测中断产生于USB进行插拔操作的10ms后,用户可以通过读取“FLODET”寄存器的值,来应答USB插拔;“FLODET”代表在当前总线上没有经过去抖动处理的状态,若用户要通过这个标志来检测USB的状态,则需要添加软件去抖动功能。
当芯片进入掉电模式时,USB 自动关闭PHY省电,此外,在特殊环境下,用户可以给特殊功能寄存器ATTR[4]写入“0”关闭PHY进入省电状态。
与USB外设通信处理:用户可以采用中断或检测USB_EVF来监测USB通信,在USB通信发生时,USB_EVF 由硬件置1,并向CPU发送中断请求。
USB主机向设备控制器请示数据时,用户需要准备相关的数据给端点缓存. 在缓冲请求数据后,用户需要写入实际数据长度给MAXPLD寄存器。一旦这个寄存器被写入数据,内部信号“In_Rdy”会被设置,当收到主机相关的IN token之后,缓冲数据将被立刻传送。在传送制定数据之后,信号 “In_Rdy”会由硬件自动清除。
USB主机要发送数据到设备控制器的OUT端点,硬件将这些数据存在指定的端点缓存里,通信完成后,硬件在MAXPLD记录数据长度,并发送“Out_Rdy”信号,这避免硬件在用户没有取走当前数据时接收下一个数据。一旦用户处理了这个通信时,由软件写入相关的寄存器“MAXPLD”来设置“Out_Rdy” 信号以接收下一次通信。
15.I2C 总线控制器 (主机/从机)
I2C 为双线,双向串行总线,I2C 总线上数据的传输速率在标准模式下可达100kbit/s 在快速模式下可达400kbit/s 在高速模式,直至 1.0 Mbit/s 的增强高速模式。
在连接到总线的器件间传递信息每个器件都有一个唯一的地址识别。数据在主机和从机间通过SCL时钟线控制在SDA数据线上实现一字节一字节的同步传输,数据由最高位MSB开始传输,每个字节包含8位,每次传输可以发送的字节数量不受限制,每个字节后必须跟一个响应位。如果从机要完成一些其他功能后,才能接收或发送下一个完整的数据。字节可以使时钟线SCL 保持低电平迫使主机进入等待状态,当从机准备好接收下一个数据字节并释放时钟线SCL 后,数据传输继续。
片上I2C逻辑提供符合I2C总线标准的串联标准接口,I2C接口自动处理字节传输,将I2CON的ENS1位设置为1,即可使能该端口,I2C H/W接口通过SDA与SCL两个引脚连到I2C总线。用于I2C操作的两个引脚需要上拉电阻,因为这两个引脚为开漏脚,在I/O引脚作为I2C端口使用时,用户必须预先设置引脚功能为I2C功能。
1)I2C协议
通常标准I2C传输协议包含四个部分:
- 起始信号或重复起始信号
- 从机地址传输
- 数据传输
- 停止信号
2)I2C寄存器
NUC1xx共有6个特殊功能寄存,用于I2C通讯: I2CON(控制寄存器 C0H), I2STATUS(状态寄存器 BDH), I2DAT(数据寄存器 BCH), I2ADDR(包括I2CADDRn和I2CADRMn,地址寄存器 C1H), I2CLK(时钟速率寄存器 BEH) 和 I2TOC(定时计数寄存器 BFH)。寄存器的第31位至第8位都是保留的,不具备任何功能。
当ENS1置1,I2C口使能后,内部状态由 I2CON 和 I2C总线上状态控制。当有新的状态发生后,会存储到 I2STATUS, I2C 中断标志(SI) 也会自动置起。若此时 EI2 被设定为高,I2C中断会被响应。
3)I2C操作模式
5种操作模式:主机/传输,主机/接收,从机/传输,从机/接收和GC 模式。
16.串行外围设备接口(SPI)控制器
SPI接口是工作于全双工模式下的同步串行数据传输接口。共支持四组双向主/从机模式传输。包括4组SPI控制器,将从外设得到的数据进行串并转换,或将数据进行并串转换,发送到外设。每组SPI控制可以被作为一个主机,驱动最多2个外部从设备,还可以被设置为外围设备的从机。
该主/从机内核包含2组32位输出/输入数据缓存,可支持突发传输(burst mode)模式,并支持各种不同长度的变量数据模式,最多可支持64位数据传输。
该控制器支持不同串行时钟,支持1位、2位数据传输模式。支持MSB 或 LSB 为最先传输模式。支持2个通道的PDMA请求,一个用于发送,一个用于接收。
1)SPI作为主机时,与 一个从机设备通信如下:
a.对DIVIDER内写入值,确定传输频率。
b. 将主机模式的相应设置写入SSR,设定 ASS = 0, SS_LVL = 0 且SSR[0] 或SSR[1] =1 用以使能模块。
c. 将主机模式的相应设置写入寄存器SPI_CNTRL。
d. 如果SPI主机要发送一个字节的数据到外设,则将所要发送的数据写入寄存器SPI_Tx0。
e. 如果SPI主机只是从外设接收一个字节的数据,不必管被传输出去的数据是什么,只需向寄存器SPI_TX0写入0xff。
f. 使能GO_BUSY位(SPI_CNTRL[0]=1),以开始SPI接口的数据传输。
g. 等到SPI中断发生,或检测GO_BUSY位直到被硬件自动清0。
h.从寄存器SPI_RX0[7:0]读出所接收到的一个字节的数据。
i.重复步骤d,继续其他数据的传输,或设置SSR[0]为0以停止外设。
2)SPI作为从机时
a.设置从机有效电平位SS_LVL(SPI_SSR[2]=1)与从机选择电平触发位SS_LTRIG(SPI_SSR[4]=1)使从机选择信号为高电平触发。
b.将从机模式的相应设置写入寄存器SPI_CNTRL。
c.如果SPI从机要发送一个字节的数据到SPI主机,则将所要发送的数据写入寄存器SPI_Tx0。
d.如果SPI从机只是要从外设主机接收一个字节的数据,不必管被传输的数据是什么,只需向寄存器SPI_TX0写入0xff。
e. 使能GO_BUSY位(SPI_CNTRL[0]=1),等到外设的从机选择触发输入和串行时钟输入,以开始SPI接口的数据传输。
f. 等到SPI中断发生,或检测GO_BUSY位直到被硬件自动清0。
g.从寄存器SPI_RX0[7:0]读出所接收到的一个字节的数据。
h.重复步骤c,继续其他数据的传输,或设置SSR[0]为0以停止外设。
17.I2S 控制器
I2S控制器由IIS协议与外部音频CODEC组成,两个8字的FIFO分别用于读与写通道,可以处理8~32位字大小。DMA控制器处理数据在FIFO与内存之间传输,两个DMA请求,一个用于发送,一个用于接收。
I2S 可工作于8位主机或从机,支持单声道和立体声的音频数据.支持I2S和MSB 校验数据格式.当缓冲超过可编程边界时,产生中断请求.
18.PS2设备控制器(PS2D)
PS/2 设备控制器为 PS/2通讯提供基本时序控制。在设备和主机之间的通讯CLK 和 DATA pins控制. 不同于 PS/2 键盘和鼠标设备控制器, 接收/传输代码需要固件进行代码转换成有意义的代码。主机发送到设备的数据是在上升沿读取,设备发送到主机的数据在上升沿之后被改变。可编程1~16 位传输缓冲 以减少CPU 干扰。支持双数据缓冲功能。
PS/2 设备具有 双向双向同步串行协议,当总线为 "Idle" 模式并且两条线都为高 (open-collector),该状态为设备允许开始 DATA 传输的唯一条件。主机在总线上有最终的控制权 ,比呢且任何时候都可以通过下拉CLK line禁止通讯。设备始终产生CLK信号,如果主机需要发送 DATA, 下拉CLK line 为低,禁止从设备进行通讯。主机随后将DATA拉低并且释放CLK,这是"Request-to-Send" 状态,通知设备开始发送CLK脉冲。所有数据每次传输1字节,每字节包括11-12位:1 开始位(一直为 0);8 数据位(先最低位);1 奇偶位(odd parity);1 停止位(一直为1);1 应答位(主机~设备通讯)。
设备向主机传输,设备应用于连续的 11-位 架构:1 个开始位(始终为 0);8 数据位(最高位最先传输);1奇偶位(odd parity);1停止位(一直为1)。
主机向设备传输:首先,PS/2 设备一直产生 CLK 信号,如果主机希望发送DATA, 首先需设定CLK 和 DATA在 "Request-to-send" 状态:拉低CLK 至少100 us 禁止通讯;应用 "Request-to-send" 拉 DATA 为低, 释放CLK。设备在不超过10 ms时间内需不间断的监控状态,当设备监控到此状态,将开始产生CLK 信号和8位DATA位 1 位停止位。当CLK line为低时,主机改变DATA line,当CLK为高时设备读数据。停止位接收后,设备发出应答信号,使DATA line 为低 并且产生CLK 脉冲。
写PS2TXDATA0 寄存器将触发设备和主机通讯,在向TX FIFO传输数据前,S/w 需定义TXFIFO 长度。写PS2TXDATA0 寄存器后100us,第一个字节的start bit 才会被传送到总线上。
19.局域控制网络总线(CAN Bus)
区域控制器 (CAN) 为串行通讯协议 具有多主机(multi-master) 和高效率实时控制功能,安全性能高 成本低,应用于高速网络,在汽车电子, 车身控制, 传感器, 防滑系统等。CAN 连接速度可达 1Mbit/s。CAN 2.0B 协议兼容。
总线上信息发送为固定模式.当总线空闲时, 任何的连接单元可进行数据传递.
信息传递受 4 种不同结构类型控制:
1. A DATA FRAME 数据从传输到接收的运输.
2. A REMOTE DATA FRAME 通过总线单元向传输DATA FRAME IDENTIFIER发送请求.
3. An ERROR FRAME 传输通过 任何单元侦测总线 error.
4. An OVERLOAD FRAME 应用于提供额外延时 在当前和随后 DATA 或 REMOTE FRAMES 之间.
ARM手记之新唐M0系列