HT66F40 使用 使用 使用 使用 SIM SPI Mode 之用法 之用法 之用法 之用法 1 HT66F40 使用 使用 使用 使用 SIM SPI Mode 的的的的用法 用法 用法 用法 文件编码:HA0199S 简介 简介 简介 简介 HT66F40 内建有串行接口功能,其中包括了 SPI 和I2 C 这两种总线模式,本文以 HT66F40 为母体,介绍使用 SPI 进行数据传输的方法和注意事项. SPI 通信原理 通信原理 通信原理 通信原理 SPI (Serial Peripheral Interface) 是一个全双工串行数据传输器,最初由摩托罗拉设计,其允 许多种设备通过 SPI 总线进行相互通信.设备之间通过主/从技术,只有主机能够发起数据 的传递. 一个简单的四线信号总线被用来进行所有的通信, 并且这些引脚与普通的 I/O 口共 用引脚. D a t a B u s S D I P i n S D O P i n S I M D T x / R x S h i f t R e g i s t e r B u s y S t a t u s C o n f i g u r a t i o n O p t i o n T R F F l a g E n a b l e / D i s a b l e W C O L F l a g C l o c k E d g e / P o l a r i t y C o n t r o l C l o c k S o u r c e S e l e c t f S Y S f T B C T M 0 C C R P m a t c h f r e q u e n c y / 2 S C K P i n S C S P i n C o n f i g u r a t i o n O p t i o n C S E N b i t E n a b l e / D i s a b l e C K E N b i t C K P O L B b i t SPI 方块图 方块图 方块图 方块图 SPI 接口是一个全双工的串行数据连接,串行接口功能有 4 个基本信号线,包含 SDI (串行 数据输入)、SDO (串行数据输出)、SCK (串行时钟) 和SCSB (从器件选择).注意的是,从 机选择线的条件是由 SIMC2 控制寄存器内的 CSEN 位决定的. 如果 CSEN 位被置位, SCSB 线有效,但如果被清除为零,那么 SCSB 线将处于浮空状态.下面的时序图描述了 SPI 总 线的主模式和从模式下的时序协议. HT66F40 使用 使用 使用 使用 SIM SPI Mode 之用法 之用法 之用法 之用法 2 S C K ( C K P O L B = 1 , C K E G = 0 ) S I M E N , C S E N = 1 S I M E N = 1 , C S E N = 0 ( E x t e r n a l P u l l - H i g h ) S C K ( C K P O L B = 0 , C K E G = 0 ) S C K ( C K P O L B = 1 , C K E G = 1 ) S C K ( C K P O L B = 0 , C K E G = 1 ) S D O ( C K E G = 0 ) S D O ( C K E G = 1 ) S C S S D I D a t a C a p t u r e D 7 / D 0 D 6 / D 1 D 5 / D 2 D 4 / D 3 D 3 / D 4 D 2 / D 5 D 1 / D 6 D 0 / D 7 D 7 / D 0 D 6 / D 1 D 5 / D 2 D 4 / D 3 D 3 / D 4 D 2 / D 5 D 1 / D 6 D 0 / D 7 W r i t e t o S I M D SPI 主机模式时序 主机模式时序 主机模式时序 主机模式时序 S C K ( C K P O L B = 1 ) S C K ( C K P O L B = 0 ) S D O S C S S D I D a t a C a p t u r e D 7 / D 0 D 6 / D 1 D 5 / D 2 D 4 / D 3 D 3 / D 4 D 2 / D 5 D 1 / D 6 D 0 / D 7 W r i t e t o S I M D ( S D O d o e s n o t c h a n g e u n t i l f i r s t S C K e d g e ) SPI 从机模式时序 从机模式时序 从机模式时序 从机模式时序 – CKEG=0 S C K ( C K P O L B = 1 ) S C K ( C K P O L B = 0 ) S D O S C S S D I D a t a C a p t u r e D 7 / D 0 D 6 / D 1 D 5 / D 2 D 4 / D 3 D 3 / D 4 D 2 / D 5 D 1 / D 6 D 0 / D 7 W r i t e t o S I M D ( S D O c h a n g e s a s s o o n a s w r i t i n g o c c u r s ; S D O i s f l o a t i n g i f S C S = 1 ) N o t e : F o r S P I s l a v e m o d e , i f S I M E N = 1 a n d C S E N = 0 , S P I i s a l w a y s e n a b l e d a n d i g n o r e s t h e S C S l e v e l . SPI 从机模式时序 从机模式时序 从机模式时序 从机模式时序 – CKEG=1 HT66F40 使用 使用 使用 使用 SIM SPI Mode 之用法 之用法 之用法 之用法 3 相关控制说明 相关控制说明 相关控制说明 相关控制说明 如下图所示,SPI 的接口与 I/O 功能和 I2 C 以及 A/D 转换共用脚位,要打开 SPI 功能你必须 首先将配置选项里的 SIM Function 选择为 Enable,然后设置好 SIMC0 和SIMC2 寄存器值. HT66F40 与SPI 功能相关的一共有 3 个寄存器.它们是 SIMD、SIMC0、SIMC2. SIMD 寄存器 寄存器 寄存器 寄存器 SIMD 寄存器被用来存储马上要传输或者刚接收到的数据. 它是和 I2 C 共用的, 在HT66F40 中,SPI 与I2 C 只能二选其一.要把数据写入 SPI 总线,数据必须要放入 SIMD 寄存器才能 被得到传输.相应的数据从 SPI 总线接收到后,也只能从 SIMD 寄存器中读出数据.总之, 任何通过 SPI 总线进行传送和接收的数据都必须通过 SIMD 寄存器. SIMC0 寄存器 寄存器 寄存器 寄存器 SIMC0 寄存器也是 SPI 和I2 C 共用的,它被用来打开或者关闭串行接口功能,设置 SPI 总 线数据传输的时钟频率. SIMEN:这一个 Bit 在总体上控制 SPI 接口的开与关,当SIMEN 位被清除为零时,将关闭 掉SPI 接口功能.SDI、SDO、SCK 与SCSB 将会处于浮空状态,此时,SPI 工作电流将变 为一个极小值.当这一位变为 1 时,SPI 功能将打开.当然,必须要先在配置中打开 SIM 功能,这一位才会有效.要注意的地方是,当SIMEN 位从 0 变为 1 时,此时 SPI 的控制寄 存器将会变为无法预测的值,因此,每当 SIMEN 位从 0 变为 1 时,应用程序必须要重新初 始化 SPI 的控制寄存器. HT66F40 使用 使用 使用 使用 SIM SPI Mode 之用法 之用法 之用法 之用法 4 SIM0~SIM2:这几位用来设置 SIM 功能的操作模式,也就是选择 I2 C 功能或者选择 SPI 功能.如果选择了 SPI 功能,还将选择主/从模式、主机的时钟频率,时钟可以选择为系统时 钟,也可以来源于定时器.如果选择从模式,将不用选择时钟,它的时钟由它的主机提供. 具体情况由下图所示: SIMC2 寄存器 寄存器 寄存器 寄存器 SIMC2 寄存器是一个 SPI 专用的控制寄存器. TRF:传送/接收完成标志位,当传送或者接收完成后,它将自动的设置为 1.需要软件清 除. WCOL:主/从模式下,若正在发送数据或接收数据,写SIMDR 寄存器将会置位 WCOL, 且写入数据被忽略.WCOL 功能可由配置选项打开或者关闭.WCOL 由硬件设置位,软件 清除为零. CSEN: 串行接口片选功能打开/关闭. 若CSEN=1, SCSB 片选功能有效. 主模式下, 在SCK 信号输出前先输出 SCSB 片选信号;而在从模式下,接收到 SCSB 信号前(后),数据传输被 关闭(打开).若CSEN=0,SCSB 引脚处于浮空状态,选片功能失效,此时可在外部对 SCSB 引脚 Pull-High 以实现片选功能.CSEN 功能可由配置选项打开或者关闭. MLS:MSB 或LSB 选择位.也就是传输时高位优先或者低位优先. CKEG 和CKPOLB:这两位在数据传输前必须进行设置,否则,一个错误的时钟沿会被产 生.CKPOLB 位决定时钟线的基本状态,当这一位为高时,时钟线在不活动的状态下将为 低,反之为高.CKEG 位决定时钟线有效时的时钟沿类型,它将依赖于 CKPOL 的值,下 面是这 2 字节合起来的情况. HT66F40 使用 使用 使用 使用 SIM SPI Mode 之用法 之用法 之用法 之用法 5 S/W 流程图 流程图 流程图 流程图 程序的时序图如下: S I M E N = 1 W r i t e D a t a i n t o S I M D W C O L = 1 ? C l e a r W C O L Y T r a n s m i s s i o n c o m p l e t e d ? ( T R F = 1 ? ) N Y R e a d D a t a f r o m S I M D C l e a r T R F T r a n s f e r F i n i s h e d ? N Y E N D m a s t e r o r s l a v e ? M a s t e r S l a v e A A S P I t r a n s f e r C o n f i g u r e C K P O L B , C K E G , C S E N a n d M L S S I M [ 2 : 0 ] = 0 0 0 , 0 0 1 , 0 1 0 , 0 1 1 o r 1 0 0 S I M [ 2 : 0 ] = 1 0 1 N HT66F40 使用 使用 使用 使用 SIM SPI Mode 之用法 之用法 之用法 之用法 6 SPI 操作 操作 操作 操作 在主/从机模式下,所有的通信都通过使用 SPI 总线得以实现.时序图显示了基本的总线操 作.SPI 传输过程中,主机在输出 SCK 信号前,通过传输一个 SCSB 信号选择从机,当CSEN=0, SCSB 引脚需外部上拉, 如SPI 主机模式时序图所示. 从模式在 SCSB=1 时, SDO 为浮空,SCSB=0 时,SDO 有效.从模式下,若CSEN=0,不管 SCSB 状态如何 (为高电平 或为低电平),只要 SIMEN=1,SPI 就处于有效状态.SIMC0 寄存器的 SIMEN 位必须设置 位,其可以将 SDI 引脚设成浮空状态并且将 SDO 引脚置高.在从模式下,SCK 引脚将处于 浮空状态.如果 SIMEN 位清除为零,那么总线将被禁止,并且 SCSB,SDI,SDO 和SCK 将全都处于浮空状态.在主模式下,主机将始终产生时钟信号.在数据被写入 SIMD 寄存 器后,将启动时钟和数据的传递.在从模式下,数据的传递和接受将通过接收来自外部主 机设备的时钟信号来启动.下面的步骤显示了在主/从模式下数据传递遵循的顺序. 主模式 主模式 主模式 主模式 ? 步骤 1 设置 SIMC0 控制寄存器的 SIM0~SIM2 位来选择主模式和必须的传输速率. ? 步骤 2 设置 CSEN 并利用 MLS 来选择数据从高位还是低位开始,从机必须保持一致. ? 步骤 3 设置 SIMC0 控制寄存器的 SIMEN 位来打开 SPI. ? 步骤 4 将欲传出资料写入 SIMD,检查 WCOL:WCOL=1 → 发生冲突错误,并跳至步骤 4. WCOL=0 → 跳至步骤 5. ? 步骤 5 数据存入 TXRX 缓冲 → 输出 CLK 信号和 SIMD 数据信号 → 使用 SCK 和SCSB 引脚 输出数据 → 跳至步骤 6. ? 步骤 6 检查 TRF 或等待 SPI 串行总线中断. ? 步骤 7 从SIMD 寄存器读取数据. ? 步骤 8 清除 TRF. ? 步骤 9 返回步骤 4. HT66F40 使用 使用 使用 使用 SIM SPI Mode 之用法 之用法 之用法 之用法 7 从模式 从模式 从模式 从模式 ? 步骤 1 设置的 SIM0~SIM2 位为 101 来选择从模式. ? 步骤 2 设置 CSEN 并利用 MLS 来选择数据从高位还是低位开始,主机必须保持一致. ? 步骤 3 设置 SIMC0 控制寄存器的 SIMEN 位来打开 SPI 接口. ? 步骤 4 将资料写入 SIMD,检查 WCOL:WCOL=1 → 发生冲突错误,并跳至步骤 4. WCOL=0 → 跳至步骤 5. ? 步骤 5 数据存入 TXRX 寄存器缓冲 → 等待主机时钟和 SCSB 信号 → 跳至步骤 6. ? 步骤 6 检查 TRF 或等待 SPI 串行总线中断. ? 步骤 7 从SIMDR 寄存器读取数据. ? 步骤 8 清除 TRF. ? 步骤 9 返回步骤 4. SPI 配置选项 配置选项 配置选项 配置选项 一些配置选项必须通过设备的程序来设置后用作 SPI接口功能. 一个配置选项用来在 SIMC2 寄存器里使能 WCOL 的操作和写入冲突位.另一个配置选项用来禁止或使能 SIMC0 寄存 器中的 CSEN 位.如果配置选项禁止 CSEN 位,那么 CSEN 将不能用来影响 SPI 总线所有 的控制.SIMC2 寄存器的 WCOL 位用来在数据传送中提示写入冲突错误.当数据传递操作 中出现写 SIMD 寄存器的现象时,WCOL 位会提示数据冲突并且防止继续进行写入操作. WCOL 位将通过硬件被置位,但必须通过用户应用程序来清除为零.WCOL 位的全部功能 可以通过配置选项来禁止或打开. HT66F40 使用 使用 使用 使用 SIM SPI Mode 之用法 之用法 之用法 之用法 8 程序注意事项 程序注意事项 程序注意事项 程序注意事项 在设备进入 IDLE 模式下, 注意的是, 数据的接收和传递将依赖于 FSYSON 位, 它位于 WDTC 寄存器的第 7 位,当FSYSON 位为 1 时,方可以在 IDLE 模式下继续进行数据的接收和传 递.在数据传递和接收后,TRF 位用来产生中断. 程序说明 程序说明 程序说明 程序说明 本例由主程序以及 SPI 的服务程序 2 部分组成,在主程序中,会对 MCU 进行初始化操作, 主要是对 SPI 的相关寄存器进行初始化操作,关闭一些和 SPI 功能共用 I/O 的功能.如果和 要使用的功能的 I/O 有冲突,可以改变 PRM0 寄存器的值,可以把 SPI 的SDI、SDO、SCK 与SCSB 线改变到其它 I/O 口. SPI 的服务程序 spi_server 中, 会将 data1 中的数据发送到 SPI 总线, 会将从 SPI 总在线接收 到的数据保存到 data2 中,用户可以自行修改.如果用户只需要发送或者接收,就只需要注 意data1 或者 data2 的值.请注意此例中,SPI 是设为主机,如需设为从机,请对 SIMC0 写入0A2H.其它程序无需改变. 程序中没有打开中断,如果要使用中断,请在检查 WOCL 为0后,不必再继续检查 TRF 位,可以进行其它的操作,等待中断产生. 配置选项中,要使用 SPI 总线,必须打开 SIM Function,WOCL 和CSEN.其它选项由用户 使用情况决定. 程序范例 程序范例 程序范例 程序范例 主机程序 ;function:editforSPImaster ;MCU:HT66F40 ;option: ;OSC HIRC +4M+ LIRC 32K ;SIM enable ;WCOLenable ;CSEN enable ;I/Oor RESB→ RESB ;WDT Enable twoinstructions ;Othersselect by user includeHT66F40.INC .listinclude use_data .section'data' data1 db ? data2 db ? maincode .section at 00 'code' org 00h jmp starts org 04h ;Externalinterrupt0 reti HT66F40 使用 使用 使用 使用 SIM SPI Mode 之用法 之用法 之用法 之用法 9 org 08h ;Externalinterrupt1 reti org 0ch ;Comparator0interrupt reti org 10h ;Comparator1interrupt reti org 14h ;Multifunction interrupt0 reti org 18h ;Multifunction interrupt1 reti org 1ch ;A/Dconverterinterrupt reti org 20h ;SPI 中断(Multifunction interrupt2) reti org 24h ;Time base 0 interrupt reti org 28h ;Time base 1 interrupt reti org 2ch ;Multifunction interrupt3 reti org 30h starts: callinitial main_loop: call spi_server jmpmain_loop ;下面是 SPI 的IP 程式 spi_server: set csen ;如果为从机不需要 set mls mova,22h movsimc0,a ;设置为SPI 主机,并打开 spi _loop: clrwcol ;清除wcol mova,data1 movsimd,a ;写入资料 clrwdt1 clrwdt2 szwcol ;判断写入是否有冲突 jmp spi_loop clrwdt1 clrwdt2 snz trf ;判断是否传输完成 jmp $-3 clrtrf mova,simd movdata2,a ;读出数據 ret ;初始化程式 initial: clrcp0c clrcp1c ;关闭CP 功能 clradcr1 set adoff clracerl ;关闭AD 转换功能 set c1xps0 HT66F40 使用 使用 使用 使用 SIM SPI Mode 之用法 之用法 之用法 之用法 10 set hlclk clrintc0 clrintc1 clrintc2 ret 结论 结论 结论 结论 本文讲解了 HT66F40 的SPI 相关的操作与注意事项, 使用范例利用 2 块IC 分别设置为主机 和从机进行 SPI 全双工传输正常,用户可以在自己的程序中直接插入此 IP,可根据自己的 需要按照上面程序说明自行修改.