您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 其它相关文档 > 飞思卡尔系列中DZ60单片机SPI应用程序
飞思卡尔系列中DZ60单片机SPI应用程序源代码及说明如下:#includeMC9S08DZ60.h/*I/OmapforMC9S08DZ60MLH*/#includeMCUinit.hcharTLE7231G(charSIDATA){//定义驱动TLE7231G的函数,主函数通过参数传递控制驱动的状态//SENDCHAR(SIDATA);}voidSPI_init(void){//初始化主SPI器件,不同的驱动芯片波特率会有不同。SPIC1=0x57;//01010111//详细说明见下SPIC2=0x19;//00011010SPIBR=0x00;//波特率设置为2000KHZSPIS=0x20;//SPI状态寄存器SPID=0x00;//SPI数据寄存器}/*SPI初始化:SPIC1:BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0//SPI控制寄存器1SPIESPESPTIEMSTRCPOLCPHASSOELSBFE//标志位||||||||------LSB先发(移位器方向)|||||||0:SPI串行数据传输始于最高位|||||||1:SPI串行数据传输始于最低位|||||||-----------辅选择输出使能||||||0:MODFEN=0时,通用I/O口;MODFEN=1时,模式故障的SS输入;||||||1:MODFEN=0时,通用I/O口;MODFEN=1时,自动SS输出;||||||----------------时钟相位|||||0:SPSCK上的第一个边沿出现在8周期数据传输的第一个周期的中央|||||1:SPSCK上的第一个边沿出现在8周期数据传输的第一个周期的起点|||||----------------------时钟极性||||0:SPI时钟高有效(闲置低态)||||1:SPI时钟低有效(闲置高态)||||---------------------------主/辅模式选择|||0:SPI模块配置为辅SPI器件|||1:SPI模块配置为主SPI器件|||--------------------------------SPI发送中断使能||0:禁止从SPTEF中中断(使用轮询)||1:当SPTEF为1时,请求硬件中断||-------------------------------------SPI系统使能|0:SPI系统禁止|1:SPI系统使能|------------------------------------------SPI中断使能标志0:禁止从SPRF和MODF中中断(使用轮询)1:当SPRF或MODF为1时,请求硬件中断SPIC2:BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0//SPI控制寄存器2000MODFENBIDIROE0SPISWAISPC0//标志位||||||||-------管脚控制|||||||0:SPI为数据输入和数据输出使用独立管脚|||||||1:SPI配置用于单线双向运行|||||||-----------SPI停止在等待模式||||||0:在等待模式中,SPI时钟继续运行||||||1:MCU进入等待模式,SPI时钟停止||||||---------------该位不执行,时钟读为0|||||----------------------双向模式输出使能||||0:输出驱动器禁止,因此SPI数据I/O管脚作为输入||||1:SPII/O管脚作为输出使能||||---------------------------主模式故障功能使能|||0:模式故障功能禁止,主SS管脚作为不受SPI控制的通用I/O口|||1:模式故障功能使能,主SS管脚用作模式故障输入或辅选择输出|||--------------------------------该位不执行,始终读为0||-------------------------------------该位不执行,始终读为0|------------------------------------------该位不执行,始终读为0SPIBR:BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0//SPI波特率寄存器0SPPR2SPPR1SPPR0SPR3SPR2SPR1SPR0//SPI时钟频率=主时钟/预分频系数/速率系数||||----|----|----|----------速率系数:|||0000----------2|||0001----------4|||0010----------8|||0011----------16|||0100----------32|||0101----------64|||0110----------128|||0111----------256|||1000----------512|----|----|--------------------------------预分频系数:000--------------------------------1001--------------------------------2010--------------------------------3011--------------------------------4100--------------------------------5101--------------------------------6110--------------------------------7111--------------------------------8SPIS:BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0//SPI状态寄存器SPRFSPTEFMODF0000//只读寄存器,写无效|||----------------------------主模式故障标志||0:无模式故障错误||1:检测到模式故障错误||----------------------------------SPI发送缓冲器空标记|0:SPI发送缓冲器不空|1:SPI发送缓冲器空|--------------------------------------------SPI读缓冲器已满标志0:接受数据缓冲器中无数据可用1:接受数据缓冲器中有数据*//*charTLE7231_INIT()//初始化7231,即每次改变7231状态都要重新初始化{charA;A=0x00;//使TLE7231G工作空闲模式,各通}道处于清零模式SENDCHAR(A);}//若使TLE7231G工作在休眠模式,则RESET引脚送LOW*//*初始化TLE7231*//*TLE7231G输入输出数据协议:SI--输入寄存器SI_DATA:BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0//输入数据字节IN3IN2IN1IN0-----INn指第n通道的模式00000000-----00清零模式00010101-----01输入模式00101010-----10通道打开模式00111111-----11通道关闭模式SO--诊断寄存器SO_DATA:CSBIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0//输出数据字节TEROL3D3OL2D2OL1D1OL0D0--OLn:n通道空载标志位;Dn:n通道诊断标志位|0----------------------------------------------正常|1----------------------------------------------在关闭模式下空载|0-------------------------------------------正常|1-------------------------------------------n通道因过载或过温关闭|--TER:传输错误标志位0---------------------------------------------------成功传输1---------------------------------------------------传输错误或者是首次传输*/charSENDCHAR(charCHA){//发送1个8字节数据函数/*charSTATUS=SPIS_SPRF;if(STATUS==1)//如果接受数据缓冲器还没有被读取,则发起SPI传输无效return0x80;//返回错误状态;elseif(SPIS_SPTEF==1)//如果发送缓冲器不为空,则无法发起新的SPI传输return0x20;//返回错误状态else*/SPID=CHA;//返回正常发送信号}charRECVCHAR(){//接受1个8字节数据函数charSTAT,CHR;STAT=SPIS;//读SPIS状态寄存器if(STAT&0x10)//00100000进行位与,SPIS_MODF为1说明模式错误renturn0x10;//返回错误信息elseCHR=SPID;//读取SPID中数据returnCHR;}/**/
本文标题:飞思卡尔系列中DZ60单片机SPI应用程序
链接地址:https://www.777doc.com/doc-2287825 .html