版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1.LPC和STM32簡介2.STM32固件庫3.系統(tǒng)控制模塊4.引腳連接模塊5.GPIO操作6.向量中斷控制器7.外中斷輸入LPC和STM32系列ARM硬件結(jié)構(gòu)與應(yīng)用8.定時器原理及應(yīng)用9.SPI接口及應(yīng)用10.UART接口及應(yīng)用11.A/D轉(zhuǎn)換器及應(yīng)用12.看門狗13.PWM原理與應(yīng)用14.實時時鐘7外部中斷輸入概述LPC2000系列ARM具有4路外部中斷,可以設(shè)置為2種類型:邊沿觸發(fā):上升沿觸發(fā)下降沿觸發(fā)電平觸發(fā):高電平觸發(fā)低電平觸發(fā)中斷信號下降沿觸發(fā)7外部中斷輸入邊沿觸發(fā)中斷下降沿觸發(fā)類型中斷的請求和清除時序。T1T2T1時刻,中斷信號有下降沿產(chǎn)生,中斷控制器向CPU發(fā)出中斷請求。1T2時刻,CPU執(zhí)行完成中斷控制器的中斷服務(wù)程序,清除中斷,中斷信號回復(fù)到高電平。2中斷信號低電平觸發(fā)7外部中斷輸入電平觸發(fā)中斷低電平觸發(fā)類型中斷的請求和清除時序。T1T3T1時刻,中斷信號開始由高電平轉(zhuǎn)為低電平。1T2時刻,中斷控制器確認(rèn)中斷信號是低電平后,將向CUP發(fā)出中斷請求。2T2T3時刻,CPU執(zhí)行完成中斷控制器的中斷服務(wù)程序,清除中斷,中斷信號回復(fù)到高電平。3中斷源1(WDT)...中斷源14(EINT0)中斷源15(EINT1)...中斷源17(EINT3)ARM處理器核向量中斷控制器IRQFIQ7外部中斷輸入外部中斷源LPC2000系列微控制器幾乎所有的外設(shè)部件都可以產(chǎn)生中斷。其中外部中斷含有4個獨立的中斷輸入。系統(tǒng)控制模塊功能匯總名稱描述訪問復(fù)位值*地址EXTINT外部中斷標(biāo)志寄存器R/W00xE01FC140EXTWAKE外部中斷喚醒寄存器R/W00xE01FC144EXTMODE外部中斷方式寄存器R/W00xE01FC148EXTPOLAR外部中斷極性寄存器R/W00xE01FC14C*:復(fù)位值僅指已使用位中保存的數(shù)據(jù),不包括保留位的內(nèi)容。寄存器匯總管腳連接控制外部中斷極性控制外部中斷方式控制掉電喚醒控制中斷標(biāo)志PINSELxEXTPOLAREXTMODEEXTINTEXTWAKECPU其它部件12347外部中斷輸入寄存器匯總可以通過設(shè)置PINSELx寄存器選擇對應(yīng)引腳為外部中斷輸入引腳。1可以通過設(shè)置EXTPOLAR和EXTMODE確定外部中斷的觸發(fā)信號。2可以控制把CPU從掉電模式喚醒。3有效中斷信號設(shè)置中斷標(biāo)志。4外部中斷極性控制外部中斷方式控制掉電喚醒控制中斷標(biāo)志EXTPOLAREXTMODEEXTINTEXTWAKE管腳連接控制PINSELxCPU其它部件寄存器匯總中斷相關(guān)寄存器EXTINT——EINT07:40EINT11EINT22EINT33
若引腳上出現(xiàn)了符合要求的信號,EXTINT寄存器中對應(yīng)的中斷標(biāo)志將被置位。向該寄存器的EINT0~EINT3位寫入1,可將其清零。外部中斷標(biāo)志寄存器(EXTINT):注意:在電平觸發(fā)方式下,清除中斷標(biāo)志只有在引腳處于無效狀態(tài)時才可實現(xiàn)。比如設(shè)置為低電平中斷,則只有在中斷引腳恢復(fù)為高電平后才能清除中斷標(biāo)志。
設(shè)置該寄存器允許相應(yīng)的外部中斷將處理器從掉電模式喚醒。實現(xiàn)掉電喚醒不需要在向量中斷控制器(VIC)中使能相應(yīng)的中斷。該寄存器的低四位(EXTWAKE[3:0])分別對應(yīng)外部中斷3~0。外部中斷喚醒寄存器(EXTWAKE):控制寄存器EXTWAKE——EXTWAKE07:40EXTWAKE11EXTWAKE22EXTWAKE33外部中斷方式控制寄存器(EXTMODE):該寄存器控制著外部中斷輸入信號的有效觸發(fā)方式,低四位分別對應(yīng)外部中斷3~0。對應(yīng)位為0時,電平觸發(fā)外部中斷;對應(yīng)位為1時,邊沿觸發(fā)外部中斷??刂萍拇嫫鱁XTMODE——EXTMODE07:40EXTMODE11EXTMODE22EXTMODE33外部中斷極性控制寄存器(EXTPOLAR):電平觸發(fā)方式下:對應(yīng)位為0時,低電平觸發(fā)外部中斷;對應(yīng)位為1時,高電平觸發(fā)外部中斷。邊沿觸發(fā)方式下:對應(yīng)位為0時,下降沿觸發(fā)外部中斷;對應(yīng)位為1時,上升沿觸發(fā)中斷??刂萍拇嫫鱁XTPOLAR——EXTPOLAR07:40EXTPOLAR11EXTPOLAR22EXTPOLAR33設(shè)置說明相應(yīng)位設(shè)置值信號波形極性控制寄存器(EXTPOLAR)方式控制寄存器(EXTMODE)低電平觸發(fā)0(低)0(電平)高電平觸發(fā)1(高)0(電平)下降沿觸發(fā)0(下降)1(邊沿)上升沿觸發(fā)1(上升)1(邊沿)中斷信號波形與設(shè)置方式7外部中斷輸入外部中斷引腳設(shè)置LPC2000系列芯片中,外部中斷輸入功能的引腳絕大多數(shù)同時還作為通信上的一個功能引腳,這樣處理器可以通過外部中斷喚醒,之后引腳設(shè)為通訊端口。外部中斷名稱引腳名該引腳其它功能外部中斷0(EINT0)P0.1RXD0P0.16外部中斷1(EINT1)P0.3SDA0P0.14DCD外部中斷2(EINT2)P0.7SSEL0P0.15RI外部中斷3(EINT3)P0.9RXD1P0.20SSEL1P0.30LPC2000系列芯片允許多個引腳同時作為一個外部中斷的輸入引腳。根據(jù)其方式位和極性位的不同,外部中斷邏輯處理如下:
低電平觸發(fā)方式:作為EINT功能的全部引腳的狀態(tài)相與后作為輸入信號;高電平觸發(fā)方式:作為EINT功能的全部引腳的狀態(tài)相或后作為輸入信號;邊沿觸發(fā)方式:只使用GPIO端口號最低的那個引腳,并且與極性設(shè)置無關(guān)。在實際應(yīng)用中的注意點:如果要產(chǎn)生外部中斷,除了引腳連接模塊的設(shè)置,還需設(shè)置VIC模塊,否則外部中斷只能反映在EXTINT寄存器中;要使器件進(jìn)入掉電模式并通過外部中斷喚醒,軟件應(yīng)該正確設(shè)置引腳的外部中斷功能,再進(jìn)入掉電模式。7外部中斷輸入外部中斷與VIC的關(guān)系通道14EINT0向量IRQ通道0向量IRQ通道15非向量IRQ通道VICIntSelect[14]VICIntEnable[14]IRQFIQVICVectAddr0VICVectCntl0VICVectAddr15VICVectCntl15VICDefVectAddrIRQ通道分配注意:這里僅以EINT0為例來進(jìn)行講解,EINT1~EINT3與之類似,此處不再重復(fù)。外部中斷0位于VIC通道14,中斷使能寄存器VICIntEnable[14]用來控制通道14的使能:當(dāng)VICIntEnable[14]=0時,通道14中斷禁止
7外部中斷輸入外部中斷與VIC的關(guān)系通道14EINT0向量IRQ通道0向量IRQ通道15非向量IRQ通道VICIntSelect[14]VICIntEnable[14]IRQFIQVICVectAddr0VICVectCntl0VICVectAddr15VICVectCntl15VICDefVectAddrIRQ通道分配注意:這里僅以EINT0為例來進(jìn)行講解,EINT1~EINT3與之類似,此處不再重復(fù)。外部中斷0位于VIC通道14,中斷使能寄存器VICIntEnable[14]用來控制通道14的使能:當(dāng)VICIntEnable[14]=0時,通道14中斷禁止當(dāng)VICIntEnable[14]=1時,通道14中斷使能通道14EINT0向量IRQ通道0向量IRQ通道15非向量IRQ通道VICIntSelect[14]VICIntEnable[14]IRQFIQVICVectAddr0VICVectCntl0VICVectAddr15VICVectCntl15VICDefVectAddrIRQ通道分配7外部中斷輸入外部中斷與VIC的關(guān)系注意:這里僅以EINT0為例來進(jìn)行講解,EINT1~EINT3與之類似,此處不再重復(fù)。外部中斷0位于VIC通道14,中斷選擇寄存器VICIntSelect[14]用來選擇通道14的中斷類型:當(dāng)VICIntSelect[14]=0時,通道14分配為IRQ中斷
7外部中斷輸入外部中斷與VIC的關(guān)系通道14EINT0向量IRQ通道0向量IRQ通道15非向量IRQ通道VICIntSelect[14]VICIntEnable[14]IRQFIQVICVectAddr0VICVectCntl0VICVectAddr15VICVectCntl15VICDefVectAddrIRQ通道分配注意:這里僅以EINT0為例來進(jìn)行講解,EINT1~EINT3與之類似,此處不再重復(fù)。外部中斷0位于VIC通道14,中斷選擇寄存器VICIntSelect[14]用來選擇通道14的中斷類型:當(dāng)VICIntSelect[14]=0時,通道14分配為IRQ中斷當(dāng)VICIntSelect[14]=1時,通道14分配為FIQ中斷7外部中斷輸入外部中斷的設(shè)置LPC2000系列ARM的電平中斷可以設(shè)置為電平中斷和邊沿中斷。當(dāng)EXTMODE[0]=0時,外部中斷0設(shè)置為電平觸發(fā)。當(dāng)EXTMODE[0]=1時,外部中斷0設(shè)置為邊沿觸發(fā)。注意:這里僅以EINT0為例來進(jìn)行講解,EINT1~EINT3與之類似,此處不再重復(fù)。低電平高電平EINT00EXTMODE[0]=0EXTPOLAR[0]高電平中斷低電平中斷上升沿中斷下降沿中斷邊沿中斷VIC外部中斷001101電平中斷7外部中斷輸入外部中斷的設(shè)置LPC2000系列ARM的電平中斷可以設(shè)置為電平中斷和邊沿中斷。當(dāng)EXTMODE[0]=0時,外部中斷0設(shè)置為電平觸發(fā)。當(dāng)EXTMODE[0]=1時,外部中斷0設(shè)置為邊沿觸發(fā)。注意:這里僅以EINT0為例來進(jìn)行講解,EINT1~EINT3與之類似,此處不再重復(fù)。EINT00EXTMODE[0]=1EXTPOLAR[0]高電平中斷低電平中斷上升沿中斷下降沿中斷電平中斷VIC外部中斷001101下降沿上升沿邊沿中斷7外部中斷輸入電平中斷設(shè)置低電平注意:這里僅以EINT0為例來進(jìn)行講解,EINT1~EINT3與之類似,此處不再重復(fù)。LPC2000系列ARM的電平中斷可以設(shè)置為高電平觸發(fā)和低電平觸發(fā)。當(dāng)EXTPOLAR[0]=0時,外部中斷0設(shè)置為低電平觸發(fā)。當(dāng)EXTPOLAR[0]=1時,外部中斷0設(shè)置為高電平觸發(fā)。EINT00EXTMODE[0]=0EXTPOLAR[0]=0高電平中斷低電平中斷上升沿中斷下降沿中斷電平中斷邊沿中斷VIC外部中斷0011017外部中斷輸入電平中斷設(shè)置EINT00EXTMODE[0]=0EXTPOLAR[0]=1高電平中斷低電平中斷上升沿中斷下降沿中斷電平中斷邊沿中斷VIC外部中斷001101注意:這里僅以EINT0為例來進(jìn)行講解,EINT1~EINT3與之類似,此處不再重復(fù)。LPC2000系列ARM的電平中斷可以設(shè)置為高電平觸發(fā)和低電平觸發(fā)。當(dāng)EXTPOLAR[0]=0時,外部中斷0設(shè)置為低電平觸發(fā)。當(dāng)EXTPOLAR[0]=1時,外部中斷0設(shè)置為高電平觸發(fā)。高電平7外部中斷輸入邊沿中斷設(shè)置EINT00EXTMODE[0]=1EXTPOLAR[0]=0高電平中斷低電平中斷上升沿中斷下降沿中斷電平中斷邊沿中斷VIC外部中斷001101注意:這里僅以EINT0為例來進(jìn)行講解,EINT1~EINT3與之類似,此處不再重復(fù)。LPC2000系列ARM的邊沿中斷可以設(shè)置為上升沿觸發(fā)和下降沿觸發(fā)。當(dāng)EXTPOLAR[0]=0時,外部中斷0設(shè)置為下降沿觸發(fā)。當(dāng)EXTPOLAR[0]=1時,外部中斷0設(shè)置為上升沿觸發(fā)。下降沿7外部中斷輸入邊沿中斷設(shè)置EINT00EXTMODE[0]=0EXTPOLAR[0]=1高電平中斷低電平中斷上升沿中斷下降沿中斷電平中斷邊沿中斷VIC外部中斷001101注意:這里僅以EINT0為例來進(jìn)行講解,EINT1~EINT3與之類似,此處不再重復(fù)。LPC2000系列ARM的邊沿中斷可以設(shè)置為上升沿觸發(fā)和下降沿觸發(fā)。當(dāng)EXTPOLAR[0]=0時,外部中斷0設(shè)置為下降沿觸發(fā)。當(dāng)EXTPOLAR[0]=1時,外部中斷0設(shè)置為上升沿觸發(fā)。上升沿7外部中斷輸入外部中斷的設(shè)置——中斷標(biāo)志EXTINT[0]EXTINT[1]EXTINT[2]EXTINT[3]觸發(fā)外部中斷0觸發(fā)外部中斷1觸發(fā)外部中斷2觸發(fā)外部中斷3外部中斷標(biāo)志寄存器EXTINT注意:外部中斷標(biāo)志寫“1”清零。7外部中斷輸入外部中斷應(yīng)用示例初始化EINT0為電平中斷:初始化EINT0為下降沿中斷:清除所有外部中斷標(biāo)志:PINSEL1=(PINSEL1&0xFFFFFFFC)|0x01;EXTMODE=EXTMODE&0x0E;EXTINT=0x0F;PINSEL1=(PINSEL1&0xFFFFFFFC)|0x01;EXTMODE=EXTMODE|0x01;EXTPOLAR=EXTPOLAR&0x0E;7STM32外部中斷特性7STM32外部中斷7STM32外部中斷作為外部中斷輸入,有以下幾個步驟:
1)初始化IO口為輸入。2)開啟IO口復(fù)用時鐘,設(shè)置IO口與中斷線的映射關(guān)系。開啟與該IO口相對的線上中斷/事件,設(shè)置觸發(fā)條件。3)配置中斷分組(NVIC),并使能中斷。4)編寫中斷服務(wù)函數(shù)。7STM32外部中斷1配置GPIO針腳作為外部中斷的觸發(fā)事件
1、選擇IO針腳GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;注意,如果的針腳是端口的4號針腳,配置的中斷一定是EXTI42、配置針腳為輸入GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;3、初始化針腳GPIO_Init(GPIOD,&GPIO_InitStructure);7STM32外部中斷2配置EXTI線,使中斷線和IO針腳線連接上1、將EXTI線連接到IO端口上將EXTI線4連接到端口GPIOD的第4個針腳上
GPIO_EXTILineConfig(GPIO_PortSourceGPIOD,GPIO_PinSource4);2、配置中斷邊沿
/*配置EXTI線0上出現(xiàn)下降沿,則產(chǎn)生中斷*/
EXTI_InitStructure.EXTI_Line=EXTI_Line4;
注意:如果配置的4號針腳,那么EXTI_Line4是必須的
EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;//下降沿觸發(fā)
EXTI_InitStructure.EXTI_LineCmd=ENABLE;
//中斷線使能
EXTI_Init(&EXTI_InitStructure);
//初始化中斷
EXTI_GenerateSWInterrupt(EXTI_Line4);
//EXTI_Line4中斷允許7STM32外部中斷3配置中斷NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//設(shè)置中斷優(yōu)先級/*允許EXTI4中斷*/NVIC_InitStructure.NVIC_IRQChannel=EXTI4_IRQChannel;//中斷通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;//強(qiáng)占優(yōu)先級NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;//次優(yōu)先級NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//通道中斷使能NVIC_Init(&NVIC_InitStructure);
//初始化中斷7STM32外部中斷4.中斷服務(wù)程序的編寫voidEXTI3_IRQHandler(void){ GPIO_SetBits(GPIOD,GPIO_Pin_3); EXTI_ClearITPendingBit(EXTI_Line3);}
voidEXTI9_5_IRQHandler(void){ GPIO_SetBits(GPIOB,GPIO_Pin_5);
EXTI_ClearITPendingBit(EXTI_Line5);}8定時器LPC定時器特性32位可編程預(yù)分頻器;4路捕獲通道;4個匹配寄存器;4個匹配輸出通道。預(yù)分頻器(PR、PC)定時器、計數(shù)器(TC)PCLK使能0x00000000定時器控制寄存器(TCR)復(fù)位捕獲寄存器0(CR0)捕獲寄存器1(CR1)捕獲寄存器2(CR2)捕獲寄存器3(CR3)捕獲控制寄存器(CCR)捕獲功能匹配功能匹配控制寄存器(MCR)MAT[3:0]CAP[3:0]中斷標(biāo)志寄存器(IR)比較器定時器計數(shù)值匹配寄存器0(MR0)匹配寄存器1(MR1)匹配寄存器2(MR2)匹配寄存器3(MR3)外部匹配寄存器(EMR)定時器結(jié)構(gòu)圖8定時器功能簡介預(yù)分頻器
捕獲功能
匹配功能8定時器分頻器結(jié)構(gòu)描述名稱描述訪問復(fù)位值PR預(yù)分頻控制寄存器。用于設(shè)定預(yù)分頻值,為32位寄存器。讀寫0PC預(yù)分頻計數(shù)器。為32位計數(shù)器,計數(shù)頻率為PCLK,當(dāng)計數(shù)值等于預(yù)分頻計數(shù)器的值時,TC計數(shù)器加1。讀寫0TC定時器計數(shù)器。為32位計數(shù)器,計數(shù)頻率為PCLK經(jīng)過預(yù)分頻計數(shù)器后頻率值。讀寫0分頻器寄存器描述匹配功能匹配控制寄存器(MCR)MAT[3:0]比較器定時器計數(shù)值匹配寄存器0(MR0)匹配寄存器1(MR1)匹配寄存器2(MR2)匹配寄存器3(MR3)外部匹配寄存器(EMR)名稱描述訪問復(fù)位值MCR匹配控制寄存器,用于控制在匹配時是否產(chǎn)生中斷或復(fù)位TC讀寫0MR0匹配寄存器0,通過MCR寄存器可以設(shè)置匹配發(fā)生時的動作讀寫0MR1匹配寄存器1,通過MCR寄存器可以設(shè)置匹配發(fā)生時的動作讀寫0MR2匹配寄存器2,通過MCR寄存器可以設(shè)置匹配發(fā)生時的動作讀寫0MR3匹配寄存器3,通過MCR寄存器可以設(shè)置匹配發(fā)生時的動作讀寫0EMR外部匹配寄存器,EMR控制外部匹配管腳MATx.0~MATx.3讀寫0匹配功能匹配功能寄存器描述-匹配控制寄存器匹配控制寄存器用于控制在發(fā)生匹配時定時器所執(zhí)行的操作。位功能描述復(fù)位值0中斷(MR0)為1時,MR0與TC值的匹配將產(chǎn)生中斷。為0時禁止。01復(fù)位(MR0)為1時,MR0與TC值的匹配將使TC復(fù)位。為0時禁止。02停止(MR0)為1時,MR0與TC值的匹配將清零TCR的bit0位,使TC和PC停止。為0時該特性被禁止。05:3MR1與匹配0(MR0)對應(yīng)位功能相同(略)08:6MR2011:9MR30匹配功能匹配控制寄存器(MCR)MAT[3:0]比較器定時器計數(shù)值匹配寄存器0(MR0)匹配寄存器1(MR1)匹配寄存器2(MR2)匹配寄存器3(MR3)外部匹配寄存器(EMR)匹配寄存器(MR0~MR3)值與定時器計數(shù)值相比較,當(dāng)兩個值相等時自動觸發(fā)在MCR寄存器中設(shè)置的動作。位31:0復(fù)位值功能匹配值0匹配功能匹配控制寄存器(MCR)MAT[3:0]比較器定時器計數(shù)值匹配寄存器0(MR0)匹配寄存器1(MR1)匹配寄存器2(MR2)匹配寄存器3(MR3)外部匹配寄存器(EMR)匹配功能寄存器描述-匹配寄存器
外部匹配寄存器提供外部匹配管腳MATn.0~MATn.3(n為0或1)的控制和狀態(tài)。匹配功能匹配控制寄存器(MCR)MAT[3:0]比較器定時器計數(shù)值匹配寄存器0(MR0)匹配寄存器1(MR1)匹配寄存器2(MR2)匹配寄存器3(MR3)外部匹配寄存器(EMR)匹配功能寄存器描述-外部匹配寄存器管腳名稱管腳方向管腳描述MAT0.3~MAT0.0MAT1.3~MAT1.0輸出外部匹配輸出0/1。當(dāng)匹配寄存器0/1(MR3:0)等于定時器計數(shù)器(TC)時,該輸出可翻轉(zhuǎn)、變?yōu)榈碗娖?、變?yōu)楦唠娖交虿蛔?。外部匹配寄存器(EMR)控制該輸出的功能??蛇x擇多個管腳并行用作匹配輸出功能。例如,同時選擇2個管腳并行提供MAT1.3功能。定時器匹配輸出引腳描述信號輸出匹配控制寄存器Tx定時器匹配寄存器=當(dāng)定時器值等于預(yù)設(shè)的匹配值時,從引腳輸出特定的信號信號輸出=位功能描述復(fù)位值0外部匹配0反映相應(yīng)外部匹配的狀態(tài),而不管是否連接到管腳。發(fā)生匹配時該位的動作由EMR中相應(yīng)的控制位決定。01外部匹配102外部匹配203外部匹配305:4外部匹配控制0決定相應(yīng)外部匹配的功能。00:不執(zhí)行任何動作;01:將對應(yīng)的外部匹配輸出設(shè)置為0;10:將對應(yīng)的外部匹配輸出設(shè)置為1;11:使對應(yīng)的外部匹配輸出翻轉(zhuǎn)。07:6外部匹配控制109:8外部匹配控制2011:10外部匹配控制30匹配功能寄存器描述-外部匹配寄存器捕獲寄存器0(CR0)捕獲寄存器1(CR1)捕獲寄存器2(CR2)捕獲寄存器3(CR3)捕獲控制寄存器(CCR)捕獲功能CAP[3:0]定時器計數(shù)值名稱描述訪問復(fù)位值CCR捕獲控制寄存器,用于設(shè)置捕獲信號的觸發(fā)特征,以及捕獲發(fā)生時是否產(chǎn)生中斷。讀寫0CR0捕獲寄存器0,在捕獲0引腳上產(chǎn)生捕獲時間時,CR0裝載TC的值。只讀0CR1功能同上。只讀0CR3功能同上。只讀0CR3功能同上。只讀0捕獲功能捕獲寄存器0(CR0)捕獲寄存器1(CR1)捕獲寄存器2(CR2)捕獲寄存器3(CR3)捕獲控制寄存器(CCR)捕獲功能CAP[3:0]定時器計數(shù)值捕獲功能寄存器描述-捕獲控制寄存器在發(fā)生捕獲事件時,捕獲控制寄存器用于控制是否將定時器計數(shù)值裝入寄存器。同時還可以設(shè)置捕獲信號的特征。信號過濾捕獲控制寄存器Tx定時器捕獲寄存器管腳名稱管腳方向管腳描述CAP0.3~CAP0.0CPA1.3~CAP1.0輸入捕獲信號,用來捕獲管腳的跳變,可配置為將定時器值裝入一個捕獲寄存器,并可選擇產(chǎn)生一個中斷。定時器捕獲引腳描述如果輸入信號滿足設(shè)定的要求,將觸發(fā)捕獲動作位功能描述復(fù)位值0CAPn.0上升沿捕獲為1時,CAPn.0引腳上0到1的跳變將導(dǎo)致TC的內(nèi)容裝入CR0。為0時,該特性被禁止。01CAPn.1下降沿捕獲為1時,CAPn.0引腳上1到0的跳變將導(dǎo)致TC的內(nèi)容裝入CR0。為0時,該特性被禁止。02CAPn.0事件中斷為1時,CAPn.0的捕獲事件將產(chǎn)生一個中斷。為0時該特性被禁止。05:3CAPn.1與CAPn.0對應(yīng)位功能相同(略)08:6CAPn.2與CAPn.0對應(yīng)位功能相同(略)011:9CAPn.3與CAPn.0對應(yīng)位功能相同(略)0捕獲功能寄存器描述-捕獲控制寄存器
當(dāng)發(fā)生捕獲事件時,可將定時器計數(shù)值裝入該寄存器。位31:0復(fù)位值功能捕獲值0捕獲功能寄存器描述-捕獲寄存器捕獲寄存器0(CR0)捕獲寄存器1(CR1)捕獲寄存器2(CR2)捕獲寄存器3(CR3)捕獲控制寄存器(CCR)捕獲功能CAP[3:0]定時器計數(shù)值捕獲功能注意事項當(dāng)選擇多個管腳作捕獲功能時,只有序號最低的那一個管腳是有效的。例,如果P0.2與P0.22均設(shè)置為CAP0.0,那么只有P0.2是有效的,P0.22的捕獲功能無效。
定時器控制寄存器TCR用于控制定時器計數(shù)器的操作。TCR功能描述復(fù)位值0計數(shù)器使能1:定時器計數(shù)器和預(yù)分頻計數(shù)器使能計數(shù);0:定時器計數(shù)器和預(yù)分頻計數(shù)器停止計數(shù)。01計數(shù)器復(fù)位為1時定時器計數(shù)器和預(yù)分頻計數(shù)器在PCLK的下一個上升沿同步復(fù)位。計數(shù)器在TCR的bit1恢復(fù)為0之前保持復(fù)位狀態(tài)。0預(yù)分頻器(PR、PC)定時器、計數(shù)器(TC)PCLK使能0x00000000定時器控制寄存器(TCR)復(fù)位控制寄存器-TCR中斷標(biāo)志寄存器(IR)捕獲功能匹配功能中斷寄存器包含4個位用于匹配中斷,另外4個位用于捕獲中斷。如果有中斷產(chǎn)生,IR中的對應(yīng)位會置位。向?qū)?yīng)的IR位寫入1會復(fù)位中斷,寫入0無效。位功能描述位功能描述0MR0中斷匹配0中斷4CR0中斷捕獲0中斷1MR1中斷匹配1中斷5CR1中斷捕獲1中斷2MR2中斷匹配2中斷6CR2中斷捕獲2中斷3MR3中斷匹配3中斷7CR3中斷捕獲3中斷中斷標(biāo)志寄存器-IR定時器中斷——定時器與VIC的關(guān)系8定時器通道4定時器0向量IRQ通道0向量IRQ通道15非向量IRQ通道VICIntSelect[4]VICIntEnable[4]IRQFIQ通道5定時器1VICIntSelect[5]VICIntEnable[5]IRQFIQVICVectAddr0VICVectCntl0VICVectAddr15VICVectCntl15VICDefVectAddrIRQ通道分配TIMER0、TIMER1分別位于VIC的通道4和通道5。中斷使能寄存器VICIntEnable的Bit4和Bit5分別用來控制通道4和通道5的使能。定時器中斷TIMER0與VIC的關(guān)系當(dāng)VICIntEnable[4]=0時,通道4中斷禁止;通道4TIMER0向量IRQ通道0向量IRQ通道15非向量IRQ通道VICIntSelect[5]VICIntEnable[4]=0IRQFIQ通道5TIMER1VICIntSelect[5]VICIntEnable[5]=0IRQFIQVICVectAddr0VICVectCntl0VICVectAddr15VICVectCntl15VICDefVectAddrIRQ通道分配定時器中斷TIMER0與VIC的關(guān)系當(dāng)VICIntEnable[4]=0時,通道4中斷禁止;通道0TIMER0向量IRQ通道0向量IRQ通道15非向量IRQ通道VICIntSelect[4]VICIntEnable[4]=1IRQFIQ通道1TIMER1VICIntSelect[5]VICIntEnable[5]=0IRQFIQVICVectAddr0VICVectCntl0VICVectAddr15VICVectCntl15VICDefVectAddrIRQ通道分配當(dāng)VICIntEnable[4]=1時,通道4中斷使能。定時器中斷TIMER1與VIC的關(guān)系當(dāng)VICIntEnable[5]=0時,通道5中斷禁止;通道4TIMER0向量IRQ通道0向量IRQ通道15非向量IRQ通道VICIntSelect[44]VICIntEnable[4]=0IRQFIQ通道5TIMER1VICIntSelect[5]VICIntEnable[5]=0IRQFIQVICVectAddr0VICVectCntl0VICVectAddr15VICVectCntl15VICDefVectAddrIRQ通道分配定時器中斷TIMER1與VIC的關(guān)系當(dāng)VICIntEnable[5]=0時,通道5中斷禁止;通道4TIMER0向量IRQ通道0向量IRQ通道15非向量IRQ通道VICIntSelect[4]VICIntEnable[4]=0IRQFIQ通道5TIMER1VICIntSelect[5]VICIntEnable[5]=1IRQFIQVICVectAddr0VICVectCntl0VICVectAddr15VICVectCntl15VICDefVectAddrIRQ通道分配當(dāng)VICIntEnable[5]=1時,通道5中斷使能。定時器中斷匹配中斷LPC2000系列ARM定時器計數(shù)溢出時不會產(chǎn)生中斷,但是匹配時可以產(chǎn)生中斷。每個定時器都具有4個匹配寄存器(MR0~MR3),可以用來存放匹配值。當(dāng)計數(shù)值=匹配值時,產(chǎn)生匹配中斷。定時器中斷匹配中斷匹配控制寄存器控制著匹配中斷的使能,以定時器0匹配通道0為例:T0MCR[0]=0定時器0計數(shù)值TC=定時器0匹配值MR0T0MCR[3]定時器0計數(shù)值TC=定時器0匹配值MR1T0IR[0]T0IR[1]匹配中斷標(biāo)志當(dāng)T0TC=T0MR0時,若T0MCR[0]=0,則匹配中斷禁止;定時器中斷匹配中斷匹配控制寄存器控制著匹配中斷的使能,以定時器0匹配通道0為例:當(dāng)T0TC=T0MR0時,若T0MCR[0]=0,則匹配中斷禁止;當(dāng)T0TC=T0MR0時,若T0MCR[0]=1,則匹配中斷使能。T0MCR[0]=1定時器0計數(shù)值TC=定時器0匹配值MR0T0MCR[3]定時器0計數(shù)值TC=定時器0匹配值MR1T0IR[0]T0IR[1]匹配中斷標(biāo)志定時器中斷捕獲中斷當(dāng)定時器的捕獲引腳CAP上出現(xiàn)特定的捕獲信號時,可以產(chǎn)生中斷。以CAP0.0為例:T0CCR[0]T0CCR[1]CAP0.0T0CCR[2]捕獲中斷捕獲上升沿下降沿定時器中斷捕獲中斷當(dāng)定時器的捕獲引腳CAP上出現(xiàn)特定的捕獲信號時,可以產(chǎn)生中斷。以CAP0.0為例:T0CCR[0]T0CCR[1]CAP0.0T0CCR[2]捕獲中斷捕獲上升沿下降沿若T0CCR[0]=1,捕獲引腳CAP0.0上出現(xiàn)“上升沿”信號時,發(fā)生捕獲事件;定時器中斷捕獲中斷當(dāng)定時器的捕獲引腳CAP上出現(xiàn)特定的捕獲信號時,可以產(chǎn)生中斷。以CAP0.0為例:T0CCR[0]T0CCR[1]CAP0.0T0CCR[2]捕獲中斷捕獲上升沿下降沿若T0CCR[0]=1,捕獲引腳CAP0.0上出現(xiàn)“上升沿”信號時,發(fā)生捕獲事件;若T0CCR[1]=1,捕獲引腳CAP0.0上出現(xiàn)“下降沿”信號時,發(fā)生捕獲事件;定時器中斷捕獲中斷捕獲控制寄存器CCR控制捕獲中斷的使能。以CAP0.0為例,發(fā)生捕獲事件時,T0CCR[2]控制著捕獲中斷的使能:T0CCR[0]T0CCR[1]CAP0.0T0CCR[2]捕獲中斷捕獲上升沿下降沿當(dāng)T0CCR[2]=0時,捕獲中斷禁止;定時器中斷捕獲中斷捕獲控制寄存器CCR控制捕獲中斷的使能。以CAP0.0為例,發(fā)生捕獲事件時,T0CCR[2]控制著捕獲中斷的使能:T0CCR[0]T0CCR[1]CAP0.0T0CCR[2]捕獲中斷捕獲上升沿下降沿當(dāng)T0CCR[2]=0時,捕獲中斷禁止;當(dāng)T0CCR[2]=1時,捕獲中斷使能。8定時器使用定時器的注意要點定時計數(shù)器(TC)本身不能產(chǎn)生中斷,只有與匹配寄存器發(fā)生匹配后才能引起中斷事件;在定時器匹配發(fā)生后,可以不停止定時器工作,而動態(tài)修改匹配寄存器的值;定時器使用匹配功能的同時,還可以使用捕獲功能,而不必分時使用;
定時器計數(shù)時鐘頻率=Fpclk/(PR+1)定時器操作示例定時器設(shè)置為匹配時復(fù)位計數(shù)器并產(chǎn)生中斷。預(yù)分頻設(shè)置為2,匹配寄存器設(shè)置為6。在發(fā)生匹配的定時器周期結(jié)束時,定時器計數(shù)值復(fù)位。這樣就使匹配值具有完整長度的周期。PR=2,MRx=6,匹配時使能中斷和復(fù)位預(yù)分頻計數(shù)器計數(shù)頻率為PCLK定時器計數(shù)器計數(shù)頻率為PCLK/3最后一個周期復(fù)位定時器計數(shù)器產(chǎn)生匹配中斷定時器操作示例操作流程計算定時器的計數(shù)頻率設(shè)置匹配值及工作模式設(shè)置捕獲方式設(shè)置定時器中斷VIC啟動定時器TCR定時器操作示例-定時器0初始化操作流程計算定時器的計數(shù)頻率設(shè)置匹配值及工作模式設(shè)置捕獲方式設(shè)置定時器中斷VIC啟動定時器TCR操作流程計算定時器的計數(shù)頻率設(shè)置匹配值及工作模式設(shè)置捕獲方式設(shè)置定時器中斷VIC啟動定時器TCRVoidTime0Init(void){T0TC=0;T0PR=0;T0MCR=0x03;T0MR0=Fpclk/10;T0TCR=0x01;}C代碼:定時器設(shè)置為0設(shè)置預(yù)分頻值設(shè)置匹配模式,復(fù)位并中斷設(shè)置匹配值,0.1S啟動定時器0LPC2000定時器操作示例-用定時器測量脈沖寬度...T0TC=0;T0PR=0;while((IO0PIN&0x01)!=0);T0TCR=0x01;while((IO0PIN&0x01)==0);T0TCR=0x00;time=T0TC;...C代碼:定時器設(shè)置為0設(shè)置預(yù)分頻值等待引腳電平變低啟動定時器0等待引腳電平變高關(guān)閉定時器0讀取定時器值,即為脈寬P0.0tVtime定時器操作示例-匹配輸出VoidMATOut(void){PINSEL0=0x00000800;T0TC=0;T0PR=0;T0MCR=0x02;T0EMR=0xC0;T0MR1=5000;T0TCR=0x01;}C代碼:定時器設(shè)置為0設(shè)置預(yù)分頻值設(shè)置匹配后復(fù)位TC設(shè)置匹配后MAT0.1輸出翻轉(zhuǎn)輸出頻率周期控制啟動定時器0設(shè)置引腳連接模塊
將引腳P0.5設(shè)置為輸出50%的方波,程序設(shè)置了MR1匹配后復(fù)位定時器,并且MAT0.1輸出電平翻轉(zhuǎn)。定時器操作示例-定時器捕獲VoidTimeCAP(void){PINSEL0=0x20;T0PR=0;T0CCR=0x02;T0TC=0;T0TCR=0x01;}C代碼:設(shè)置預(yù)分頻值為0設(shè)置為下降沿捕獲清零TC啟動定時器設(shè)置引腳連接模塊示例使用定時器對P0.2引腳的信號進(jìn)行捕獲,并設(shè)置為下降沿捕獲。當(dāng)有捕獲事件產(chǎn)生時自動把定時器的當(dāng)前值裝載到T0CR0寄存器中。STM32定時器/計數(shù)器
STM32中一共有11個定時器,其中2個高級控制定時器,4個普通定時器和2個基本定時器,以及2個看門狗定時器和1個系統(tǒng)嘀嗒定時器。基本定時器:TIM1TIM8TIM2TIM3TIM4TIM5TIM6TIM7。
其中TIM1和TIM8是能夠產(chǎn)生3對PWM互補(bǔ)輸出的高級登時其,常用于三相電機(jī)的驅(qū)動,時鐘由APB2的輸出產(chǎn)生。TIM2-TIM5是普通定時器,TIM6和TIM7是基本定時器,其時鐘由APB1輸出產(chǎn)生。STM32定時器使用定時頻率計算:f=(72M/(TIM_Prescaler+1)*(1+TIM_Period))
;定時器的基本設(shè)置:2、設(shè)置預(yù)分頻數(shù),得到CK_CNT,
TIM_TimeBaseStructure.TIM_Prescaler
=
7199;
CK_CNT的計數(shù)頻率=72M/(7199+1)=10K;3、設(shè)置自動重裝載寄存器,當(dāng)計數(shù)值達(dá)到這個寄存器鎖存數(shù)值時,溢出產(chǎn)生事件
TIM_TimeBaseStructure.TIM_Period
=
9999;
10K/(9999+1)=1HZ
,也就是1S溢出一次;1、RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);STM32定時器使用4、設(shè)置計數(shù)模式TIM_TimeBaseStructure.TIM_CounterMode
=
TIM_CounterMode_Up;
從0計數(shù)到ARR產(chǎn)生溢出事件;5、
設(shè)置時間分割值
TIM_TimeBaseStructure.TIM_ClockDivision
=
TIM_CKD_DIV1
;
6、
初始化定時器2
TIM_TimeBaseInit(TIM2,
&TIM_TimeBaseStructure);7、清楚標(biāo)志
TIM_CleaRFlag(TIM2,
TIM_FLAG_Update);8、打開定時器
TIM_Cmd(TIM2,
ENABLE);STM32定時器使用9、在主函數(shù)中查詢TIM_FLAG_Update標(biāo)志置位了就清除標(biāo)志:
if(TIM_GetFlagStatus
(TIM2,TIM_FLAG_Update
)!=RESET)
{TIM_ClearFlag
(TIM2,TIM_FLAG_Update);if(
GPIO_ReadOutputDataBit(GPIOA,
GPIO_Pin_8)==0)GPIO_WriteBit(GPIOA,GPIO_Pin_8,Bit_SET);
else
GPIO_WriteBit(GPIOA,GPIO_Pin_8,Bit_RESET);
}STM32定時器使用利用中斷的方法:步驟1-6如同上,增加中斷設(shè)置7、打開中斷
溢出中斷
TIM_ITConfig(TIM2,
TIM_IT_Update,
ENABLE);
8、
打開定時器TIM_Cmd(TIM2,
ENABLE);STM32定時器使用中斷配置:NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1)
;NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQChannel;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStructure);
STM32定時器使用編寫中斷服務(wù)函數(shù)void
TIM2_IRQHandler(void){if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET){
TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
GPIO_WriteBit(GPIOD,GPIO_Pin_2,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOD,GPIO_Pin_2)));
GPIO_WriteBit(GPIOA,GPIO_Pin_8,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_8)));
}}
STM32外部脈沖計數(shù)第一步,設(shè)置GPIOGPIO_InitTypeDefGPIO_InitStructure;/*PA0,PA12->左右脈沖輸入*/
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//50M時鐘速度
GPIO_Init(GPIOA,&GPIO_InitStructure);第二步:設(shè)置RCC
RCC_ClocksTypeDefRCC_ClockFreq;SystemInit();//源自system_stm32f10x.c文件,只需要調(diào)用此函數(shù),則可完成RCC的配置.
RCC_GetClocksFreq(&RCC_ClockFreq);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);第三步,設(shè)置定時器模式voidTIM1_Configuration(void)//只用一個外部脈沖端口
{
TIM_TimeBaseInitTypeDef
TIM_TimeBaseStructure;
//配置TIMER1作為計數(shù)器
TIM_DeInit(TIM1);
TIM_TimeBaseStructure.TIM_Period=0xFFFF;
TIM_TimeBaseStructure.TIM_Prescaler=0x00;
TIM_TimeBaseStructure.TIM_ClockDivision=0x0;
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);//Timebaseconfiguration
TIM_ETRClockMode2Config(TIM1,TIM_ExtTRGPSC_OFF,TIM_ExtTRGPolarity_NonInverted,0);TIM_SetCounter(TIM1,0);
TIM_Cmd(TIM1,ENABLE);
}
第四步,可以在主函數(shù)中讀取計數(shù)器的值,其它的應(yīng)用,就看具體的情況了。u16COUN=0;intmain(void)
{
ChipHalInit();
ChipOutHalInit();while(1)
{
COUN=TIM_GetCounter(TIM1);
}}9SPI接口引腳描述引腳名稱類型描述SCK輸入/輸出串行時鐘。用于同步SPI接口間數(shù)據(jù)傳輸?shù)臅r鐘信號。該時鐘信號總是由主機(jī)輸出。SSEL輸入從機(jī)選擇。SPI從機(jī)選擇信號是一個低有效信號。MISO輸入/輸出主入從出。MISO信號是一個單向的信號,它將數(shù)據(jù)由從機(jī)傳輸?shù)街鳈C(jī)。MOSI輸入/輸出主出從入。MOSI信號是一個單向的信號,它將數(shù)據(jù)從主機(jī)傳輸?shù)綇臋C(jī)。9SPI接口硬件連接SPI從機(jī)1MOSIMISOSSELSCKSPI從機(jī)2MOSIMISOSSELSCKMOSIMISOIO2SCKSPI主機(jī)IO1SSEL作SPI主機(jī)時,SSEL要接上拉電阻時鐘極性控制位——CPOL時鐘相位控制位——CPHACPHA=0:SPI總線在時鐘線的第1個跳變沿處采樣數(shù)據(jù);CPHA=1:SPI總線在時鐘線的第2個跳變沿處采樣數(shù)據(jù)。該位決定SPI總線上數(shù)據(jù)的采樣位置。CPOL=0,當(dāng)SPI總線空閑時,SCK時鐘線為低電平;CPOL=1,當(dāng)SPI總線空閑時,SCK時鐘線為高電平。該位決定了SPI總線空閑時,SCK時鐘線的電平狀態(tài)。9SPI接口SPI數(shù)據(jù)傳輸時鐘相位為1時鐘前沿數(shù)據(jù)輸出時鐘后沿數(shù)據(jù)采樣時鐘信號極性0極性1從機(jī)選擇時鐘相位為0時鐘前沿數(shù)據(jù)采樣時鐘后沿數(shù)據(jù)輸出SPI傳輸時序時鐘前沿輸出時鐘后沿采樣時鐘前沿采樣時鐘后沿輸出主機(jī)模式從機(jī)模式
主機(jī)使用一個IO引腳選擇從機(jī);
傳輸?shù)钠鹗加芍鳈C(jī)發(fā)送數(shù)據(jù)來啟動;
時鐘(SCK)信號由主機(jī)產(chǎn)生;
通過MOSI發(fā)送數(shù)據(jù);
通過MISO引腳接收數(shù)據(jù)。
數(shù)據(jù)傳輸在SSEL被主機(jī)拉低后開始;
接收主機(jī)輸出的時鐘信號;
通過MOSI引腳接收數(shù)據(jù);
通過MISO引腳發(fā)送數(shù)據(jù)。SPI接口工作模式SPI時鐘發(fā)生器SPCCR(主機(jī))SCKSPI控制寄存器SPCRVPB總線中斷中斷標(biāo)志寄存器SPINTSPI移位寄存器SPI數(shù)據(jù)寄存器SPDRSPI發(fā)送、接收單元MOSIMISOSPI時鐘檢測器(從機(jī))SCKSSSPI狀態(tài)寄存器SPSRSPI接口內(nèi)部框圖名稱描述訪問復(fù)位值SPI0名稱SPI1名稱SPCRSPI控制寄存器。該寄存器控制SPI的操作模式。讀寫0S0SPCRS1SPCRSPSRSPI狀態(tài)寄存器。該寄存器顯示SPI的狀態(tài)。只讀0S0SPSRS1SPSRSPDRSPI數(shù)據(jù)寄存器。該雙向寄存器為SPI提供發(fā)送和接收的數(shù)據(jù)。發(fā)送數(shù)據(jù)通過寫該寄存器提供。SPI接收的數(shù)據(jù)可以從該寄存器讀出。讀寫0S0SPDRS1SPDRSPCCRSPI時鐘計數(shù)寄存器。該寄存器控制主機(jī)SCK的頻率。讀寫0S0SPCCRS0SPCCRSPINTSPI中斷標(biāo)志寄存器。該寄存器包含SPI接口的中斷標(biāo)志。讀寫0S0SPINTS0SPINT9SPI接口寄存器描述SPI寄存器描述——SPI控制寄存器位765432:0功能SPIELSBFMSTRCPOLCPHA保留SPCR寄存器包含一些可編程位來控制SPI功能模塊的功能,該寄存器必須在數(shù)據(jù)傳輸之前進(jìn)行設(shè)定。9SPI接口位765432:0功能SPIELSBFMSTRCPOLCPHA保留CPHA:時鐘相位控制。該位決定SPI傳輸時數(shù)據(jù)和時鐘的關(guān)系,并控制從機(jī)傳輸?shù)钠鹗己徒Y(jié)束。當(dāng)該位為:1:時鐘前沿數(shù)據(jù)輸出,后沿數(shù)據(jù)采樣;0:時鐘前沿數(shù)據(jù)采樣,后沿數(shù)據(jù)輸出;SPI寄存器描述——SPI控制寄存器位765432:0功能SPIELSBFMSTRCPOLCPHA保留CPOL:時鐘極性控制。1:SCK為低電平有效;0:SCK為高電平有效;SPI寄存器描述——SPI控制寄存器位765432:0功能SPIELSBFMSTRCPOLCPHA保留CPOL:主模式控制。1:SPI處于主模式;0:SPI處于從模式;SPI寄存器描述——SPI控制寄存器位765432:0功能SPIELSBFMSTRCPOLCPHA保留LSBF:字節(jié)移動方向控制。1:每字節(jié)數(shù)據(jù)從低位(LSB)開始傳輸;0:每字節(jié)數(shù)據(jù)從高位(MSB)開始傳輸;SPI寄存器描述——SPI控制寄存器位765432:0功能SPIELSBFMSTRCPOLCPHA保留SPIE:SPI中斷使能。
1:每次SPIF或MODF置位時都會產(chǎn)生硬件中斷;0:SPI中斷被禁止;SPI寄存器描述——SPI控制寄存器SPSR寄存器為只讀寄存器,用于監(jiān)視SPI功能模塊的狀態(tài),包括一般性功能和異常狀況。SPSR功能描述復(fù)位值2:0保留用戶程序不要向這些保留位寫入1。NA3ABRT從機(jī)中止標(biāo)志。為1時表示發(fā)生了從機(jī)中止。讀取該位清零。04MODF模式錯誤。為1時表示發(fā)生了模式錯誤。先通過讀取該寄存器清零MODF位,再寫SPI控制寄存器。05ROVR讀溢出。為1時表示發(fā)生了讀溢出。當(dāng)讀取該寄存器時,該位清零。06WCOL寫沖突。為1時表示發(fā)生了寫沖突。先通過讀取該寄存器清零WCOL位,再訪問SPI數(shù)據(jù)寄存器。07SPIFSPI傳輸完成標(biāo)志。為1時表示一次SPI數(shù)據(jù)傳輸完成。當(dāng)?shù)谝淮巫x取該寄存器時,該位清零。然后才能訪問SPI數(shù)據(jù)寄存器。注:SPIF不是SPI中斷標(biāo)志。中斷標(biāo)志位于SPINT寄存器中。0SPI寄存器描述——SPI狀態(tài)寄存器異常狀況-讀溢出SPI模塊內(nèi)部的讀緩沖區(qū)大小為1個字節(jié),SPIF=1表示讀緩沖區(qū)滿。當(dāng)SPI功能模塊內(nèi)部讀緩沖區(qū)滿時,又接收到新的數(shù)據(jù),就會發(fā)生讀溢出。新接收到的數(shù)據(jù)將會丟失,而狀態(tài)寄存器的讀溢出(ROVR)位將置位。VPB總線SPI數(shù)據(jù)寄存器SPDRSPI接收移位寄存器單字節(jié)緩沖區(qū)SCKMISOSPI主機(jī)模式接收數(shù)據(jù)示意圖9SPI接口SPI總線接口與發(fā)送移位寄存器之間沒有寫緩沖區(qū)。只能在SPI總線空閑期間向SPI數(shù)據(jù)寄存器寫入數(shù)據(jù)。啟動傳輸?shù)絊PIF置位(包括讀取狀態(tài)寄存器)期間,不能向SPI數(shù)據(jù)寄存器寫入數(shù)據(jù)。否則,新寫入的數(shù)據(jù)將會丟失,狀態(tài)寄存器中的寫沖突位(WCOL)置位。SCKMOSIVPB總線SPI數(shù)據(jù)寄存器SPDRSPI發(fā)送移位寄存器SPI主機(jī)模式發(fā)送數(shù)據(jù)示意圖異常狀況-寫沖突9SPI接口SPI主機(jī)接口的SSEL信號被外界拉低,引發(fā)模式錯誤,此時該主機(jī)的變化:時鐘驅(qū)動器被關(guān)閉;主機(jī)模式變?yōu)閺臋C(jī)模式;中斷標(biāo)志置位。如果要清除模式錯誤位(MODF),必須要先讀取SPI狀態(tài)寄存器,然后再重新初始化SPI控制寄存器。9SPI接口異常狀況-模式錯誤在從模式下,如果SSEL信號在傳輸結(jié)束之前變?yōu)楦唠娖?,從模式?shù)據(jù)傳輸將被中止。正在傳輸?shù)臄?shù)據(jù)將丟失。9SPI接口異常狀況-從機(jī)中止SPDR寄存器為SPI提供數(shù)據(jù)的發(fā)送和接收。處于主模式時,向該寄存器寫入數(shù)據(jù),將啟動SPI數(shù)據(jù)傳輸。從數(shù)據(jù)傳輸開始到SPIF狀態(tài)位置位并且沒有讀取狀態(tài)寄存器的這段時間內(nèi)不能對該寄存器執(zhí)行寫操作。SPDR功能描述復(fù)位值7:0數(shù)據(jù)SPI雙向數(shù)據(jù)0SPI寄存器描述——SPI數(shù)據(jù)寄存器作為主機(jī)時,SPCCR寄存器控制SCK的頻率。寄存器的值為一位SCK時鐘所占用的PCLK周期數(shù)。該寄存器的值必須為偶數(shù),并且必須不小于8。如果寄存器的值不符合以上條件,可能會導(dǎo)致產(chǎn)生不可預(yù)測的動作。SPI速率=Fpclk/SPCCRSPCCR功能描述復(fù)位值7:0計數(shù)值設(shè)定SPI時鐘計數(shù)值0SPI寄存器描述——SPI時鐘計數(shù)寄存器該寄存器包含SPI接口的中斷標(biāo)志。SPCCR功能描述復(fù)位值0SPI中斷SPI中斷標(biāo)志。向該位寫入1清零。注:當(dāng)SPIE位置“1”,并且SPIF和MODF位種至少有一位為1時,該位置位。但是只有當(dāng)SPI中斷位置位并且SPI中斷在VIC中被使能,SPI中斷才能由中斷處理程序處理。07:1保留用戶程序不要向這些位寫入1NA引發(fā)SPI中斷的事件:數(shù)據(jù)傳輸完成;發(fā)生模式錯誤。SPI寄存器描述——SPI中斷寄存器9SPI接口使用SPI接口的注意要點作主機(jī)時,SSEL引腳必須接上拉電阻,不能作為IO口使用;作主機(jī)時,在發(fā)送一字節(jié)數(shù)據(jù)的同時接收一字節(jié)數(shù)據(jù);SPI時鐘分頻值必須大于或等于8;數(shù)據(jù)寄存器與內(nèi)部移位寄存器之間沒有緩沖區(qū),寫SPDR會使數(shù)據(jù)直接進(jìn)入移位寄存器。因此數(shù)據(jù)只能在上一次數(shù)據(jù)發(fā)送完成后寫入SPDR寄存器。SPI應(yīng)用示例——作為主機(jī)操作流程設(shè)置SPI時鐘速率(SPCCR)設(shè)置為SPI主機(jī)(SPCR)選擇從機(jī)發(fā)送一字節(jié)數(shù)據(jù)啟動SPI數(shù)據(jù)傳輸?shù)却龜?shù)據(jù)發(fā)送結(jié)束(SPIF)讀出從機(jī)發(fā)送的數(shù)據(jù)或釋放從機(jī)操作流程設(shè)置SPI時鐘速率(SPCCR)設(shè)置為SPI主機(jī)(SPCR)選擇從機(jī)發(fā)送一字節(jié)數(shù)據(jù)啟動SPI數(shù)據(jù)傳輸?shù)却龜?shù)據(jù)發(fā)送結(jié)束(SPIF)讀出從機(jī)發(fā)送的數(shù)據(jù)或釋放從機(jī)操作流程設(shè)置SPI時鐘速率(SPCCR)設(shè)置為SPI主機(jī)(SPCR)選擇從機(jī)發(fā)送一字節(jié)數(shù)據(jù)啟動SPI數(shù)據(jù)傳輸?shù)却龜?shù)據(jù)發(fā)送結(jié)束(SPIF)讀出從機(jī)發(fā)送的數(shù)據(jù)或釋放從機(jī)SPI初始化代碼:#defineMSTR (1<<5)#defineCPOL (1<<4)#defineCPHA(1<<3)#defineLSBF(1<<6)#defineSPI_MODE(MSTR|CPOL)voidMSpiIni(uint8fdiv){if(fdiv<8)fdiv=8;S0PCCR=fdiv&0xFE;S0PCR=SPI_MODE;}過濾分頻值,如果小于8為非法SPI應(yīng)用示例——作為主機(jī)操作流程設(shè)置SPI時鐘速率(SPCCR)設(shè)置為SPI主機(jī)(SPCR)選擇從機(jī)發(fā)送一字節(jié)數(shù)據(jù)啟動SPI數(shù)據(jù)傳輸?shù)却龜?shù)據(jù)發(fā)送結(jié)束(SPIF)讀出從機(jī)發(fā)送的數(shù)據(jù)或釋放從機(jī)SPI主機(jī)發(fā)送和接收程序:#defineMSTR (1<<5)#defineCPOL (1<<4)#defineCPHA(1<<3)#defineLSBF(1<<6)#defineSPI_MODE(MSTR|CPOL)uint8MSendData(uint8data){IO0CLR=HC595_CS;S0PDR=data;while(0==(S0PSR&0x80));IO0SET=HC595_CS;return(S0PDR);}SPI應(yīng)用示例——作為主機(jī)操作流程設(shè)置為SPI從機(jī)(SPCR)將要發(fā)送的數(shù)據(jù)放入SPDR等待數(shù)據(jù)發(fā)送結(jié)束(SP
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《電路分析基礎(chǔ)試題》課件
- 《微觀經(jīng)濟(jì)學(xué)》考試試卷試題及參考答案
- 《專業(yè)英語(計算機(jī)英語)》復(fù)習(xí)題
- 八下期末考拔高測試卷(5)(原卷版)
- 《誠邀創(chuàng)業(yè)伙伴》課件
- 2012年高考語文試卷(安徽)(解析卷)
- 父母課堂與教育理念分享計劃
- 購物中心導(dǎo)購員服務(wù)總結(jié)
- 水產(chǎn)養(yǎng)殖行業(yè)銷售工作總結(jié)
- 娛樂場館衛(wèi)生要素
- 潛水泵安裝方案73853
- 安全操作規(guī)程(供參考)(公示牌)
- 2022年公司出納個人年度工作總結(jié)
- 蓄電池檢查和維護(hù)
- 口袋妖怪白金二周目圖文攻略(精編版)
- 安全風(fēng)險研判與承諾公告制度管理辦法(最新)
- 體育與健康課一年級(水平一)課時教案全冊
- SAP-ABAP-實用培訓(xùn)教程
- 配電房施工組織設(shè)計方案(土建部分)
- 國家開放大學(xué)電大專科《英語教學(xué)法》2023-2024期末試題及答案(試卷代號:2145)
- 管樁水平承載力計算
評論
0/150
提交評論