在从模式下,如果SSEL信号在传输结束之前变为高电平,从模式数据传输将被中止。正在传输的数据将丢失。 9 SPI接口 异常状况-从机中止 SPDR寄存器为SPI提供数据的发送和接收。处于主模式时,向该寄存器写入数据,将启动SPI数据传输。从数据传输开始到SPIF状态位置位并且没有读取状态寄存器的这段时间内不能对该寄存器执行写操作。 SPDR 功能 描述 复位值 7 : 0 数据 SPI双向数据 0 SPI寄存器描述——SPI数据寄存器 作为主机时,SPCCR寄存器控制SCK的频率。寄存器的值为一位SCK时钟所占用的PCLK周期数。该寄存器的值必须为偶数,并且必须不小于8。如果寄存器的值不符合以上条件,可能会导致产生不可预测的动作。 SPI速率 = Fpclk / SPCCR SPCCR 功能 描述 复位值 7 : 0 计数值 设定SPI时钟计数值 0 SPI寄存器描述——SPI时钟计数寄存器 该寄存器包含SPI接口的中断标志。 SPCCR 功能 描述 复位值 0 SPI中断 SPI中断标志。向该位写入1清零。 注:当SPIE位置“1”,并且SPIF和MODF位种至少有一位为1时,该位置位。但是只有当SPI中断位置位并且SPI中断在VIC中被使能,SPI中断才能由中断处理程序处理。 0 7 : 1 保留 用户程序不要向这些位写入1 NA 引发SPI中断的事件: 数据传输完成; 发生模式错误。 SPI寄存器描述——SPI中断寄存器 9 SPI接口 使用SPI接口的注意要点 作主机时,SSEL引脚必须接上拉电阻,不能作为IO口使用; 作主机时,在发送一字节数据的同时接收一字节数据; SPI时钟分频值必须大于或等于8; 数据寄存器与内部移位寄存器之间没有缓冲区,写SPDR会使数据直接进入移位寄存器。因此数据只能在上一次数据发送完成后写入SPDR寄存器。 SPI应用示例——作为主机 操作流程 设置SPI时钟速率 (SPCCR) 设置为SPI主机 (SPCR) 选择从机 发送一字节数据 启动SPI数据传输 等待数据发送结束 (SPIF) 读出从机发送的数据或释放从机 操作流程 设置SPI时钟速率 (SPCCR) 设置为SPI主机 (SPCR) 选择从机 发送一字节数据 启动SPI数据传输 等待数据发送结束 (SPIF) 读出从机发送的数据或释放从机 操作流程 设置SPI时钟速率 (SPCCR) 设置为SPI主机 (SPCR) 选择从机 发送一字节数据 启动SPI数据传输 等待数据发送结束 (SPIF) 读出从机发送的数据或释放从机 SPI初始化代码: #define MSTR (1 5) #define CPOL (1 4) #define CPHA (1 3) #define LSBF (1 6) #define SPI_MODE (MSTR | CPOL) void MSpiIni(uint8 fdiv) { if(fdiv 8) fdiv = 8; S0PCCR = fdiv 0xFE; S0PCR = SPI_MODE; } 过滤分频值,如果小于8为非法 SPI应用示例——作为主机 操作流程 设置SPI时钟速率 (SPCCR) 设置为SPI主机 (SPCR) 选择从机 发送一字节数据 启动SPI数据传输 等待数据发送结束 (SPIF) 读出从机发送的数据或释放从机 SPI主机发送和接收程序: #define MSTR (1 5) #define CPOL (1 4) #define CPHA (1 3) #define LSBF (1 6) #define SPI_MODE (MSTR | CPOL) uint8 MSendData(uint8 data) { IO0CLR = HC595_CS; S0PDR = data; while(0 == (S0PSR 0x80)); IO0SET = HC595_CS; return(S0PDR); } SPI应用示例——作为主机 操作流程 设置为SPI从机 (SPCR) 将要发送的数据放入SPDR 等待数据发送结束 (SPIF) 从SPDR中读出接收的数据 SPI应用示例——作为从机 操作流程 设置为SPI从机 (SPCR) 将要发送的数据放入SPDR 等待数据发送结束 (SPIF) 从SPDR中读出接收的数据 操作流程 设置为SPI从机 (SPCR) 将要发送的数据放入SPDR 等待数据发送结束 (SPIF) 从SPDR中读出接收的数据 SPI初始化代码: //初始化从机
原创力文档

文档评论(0)