dsPIC30F系列TIMER4/5模块详解

需积分: 7 37 下载量 178 浏览量 更新于2024-08-10 收藏 3.37MB PDF 举报
"TIMER4/5模块-chroma language_manual" 这篇文档详细介绍了dsPIC30F系列微控制器中的TIMER4/5模块,这是一个32位通用定时器,它提供了丰富的功能和工作模式。Timer4/5模块与Timer2/3模块在某些方面具有相似性,但存在一些关键差异。例如,Timer4/5不支持ADC事件触发,也不能作为输入捕捉和输出比较等其他外设模块的源。 TIMER4/5的配置主要通过16位的T4CON和T5CON特殊功能寄存器(SFR)进行,它们决定了模块的工作模式。在32位定时器/计数器操作中,Timer4是低位字,而Timer5是高位字,共同构成了32位计数值。32位定时器的操作中,Timer5的控制位被忽略,所有的设置和控制都通过T4CON寄存器完成。中断则由Timer5的中断标志位(T5IF)触发,并通过T5IE中断允许位来启用。 文档中提到,Timer4属于“B类”定时器,Timer5属于“C类”定时器,具体定时器类型的相关信息可以在电气特性章节找到。32位定时器操作时,使用Timer4的时钟和门控输入,中断由Timer5的中断标志触发。值得注意的是,T32配置位(T2CON<3>)必须设为1,才能启用32位定时器/计数器操作,所有控制位均对应T4CON寄存器。 TIMER4/5模块还包含了预分频器,可以设置为1、8、64或256的分频值,以适应不同的时钟速度需求。TGATE位(T4CON<6>)控制着门控功能,当设置为1时,定时器在T4CK输入变为高电平时停止计数,变为低电平时恢复。TCKPS<1:0>位用于设置预分频器的分频因子。 文档最后提醒读者,dsPIC30F系列的数据手册是了解器件功能的重要参考资料,同时提供了关于CPU、外设、寄存器的详细信息,以及器件指令集和编程指南。尽管有中文版,但英文版的文档同样重要,因为它包含更多关于Microchip产品性能和使用的详细信息。 在使用Microchip的器件时,需要注意的是,器件的应用信息可能会随时间更新,确保应用符合最新的技术规范是用户自身的责任。此外,Microchip不对这些信息的准确性、适销性或特定用途的适用性提供任何明示或暗示的保证,用户需自行承担使用这些信息可能带来的风险。对于生命维持和生命安全应用,Microchip不承担任何责任,用户必须同意在因使用Microchip器件引发的任何伤害、索赔、诉讼或费用时,保护和赔偿Microchip。同时,Microchip的知识产权受到法律保护,未经许可,不得转让任何许可证。
2023-06-06 上传

/* * Record.c * * Created on: 2014-5-26 * Author: zdl */ #include "includes.h" char *const Display_Name[]={ "Music List", "1-Beyond.wav", "2-LetItG.wav", "3-WeAreO.wav", "4-FanFan.wav", "5-OldBoy.wav", "6-Sodagr.wav", "7-WangF1.wav", "8-WangF2.wav", "9-Mayday.wav", "10-StevC.wav", }; void Music_Graph() { SysTickDisable(); //---------Draw Title---------- ui8Flush_Flag=FLUSH_ON; GrClearDisplay(&g_sContext); GrFlush(&g_sContext); } void Music_Begin() { DSTATUS i=1; SystemClock=SysCtlClockGet(); //----------------硬件初始化--------------- DAC_Init(); //初始化DAC //-------------------初始化SD卡-------------------- while(i==1)// 使用文件系统初始化SD卡 i=disk_initialize(0); //-------------------初始化Timer------------------- SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER1); TimerDisable(TIMER1_BASE, TIMER_A); TimerConfigure(TIMER1_BASE, TIMER_CFG_A_PERIODIC_UP); TimerIntRegister(TIMER1_BASE,TIMER_A,Timer1IntHandler); TimerIntEnable(TIMER1_BASE, TIMER_TIMA_TIMEOUT); MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC); MAP_GPIOPinTypeGPIOOutput(GPIO_PORTC_BASE, GPIO_PIN_6); MAP_GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_6,GPIO_PIN_6); SysTickEnable(); } void Music_Main() { static uint8_t preDisplay_Num=255,Display_Num=0; while((ui8ButtonKeyValue&KEY_LEFT_ENTER) == 0 &&(ui8ButtonKeyValue&KEY_RIGHT_EXIT)==0) { Display_Num = GetWheelKey(); _nop(); if(Display_Num != preDisplay_Num) { DrawMenu(Display_Num,Display_Name); preDisplay_Num = Display_Num; } SysCtlDelay(SystemClock/100); } if(Music_Enter==1) { GrClearDisplay(&g_sContext); GrStringDrawCentered(&g_sContext, Display_Name[Display_Num], AUTO_STRING_LENGTH, 63, 20, OPAQUE_TEXT); GrContextFontSet(&g_sContext, &g_sFontFixed6x8); GrStringDraw(&g_sContext,"Time:",4,0,53,1); GrStringNumberCentered(&g_sContext,0,0,35+22,57); GrStringDraw(&g_sContext,"-",1,35+9,53,1); GrStringNumberCentered(&g_sContext,0,0,35+2,57); GrStringDraw(&g_sContext,"/",1,35+34,53,1); GrStringNumberCentered(&g_sContext,0,0,35+48,57); GrStringDraw(&g_sContext,"-",1,35+55,53,1); GrStringNumberCentered(&g_sContext,0,0,35+70,57); GrFlush(&g_sContext); ui8Flush_Flag=FLUSH_OFF; WaveOpen(Display_Name[Display_Num],MONO); ui8Flush_Flag=FLUSH_ON; preDisplay_Num=255; ui8ButtonKeyValue&=~(KEY_LEFT_ENTER+KEY_RIGHT_EXIT); } else { preDisplay_Num=255; rcd_ply_sel = 255; } } void Music_Quit() { MAP_GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_5,0); TimerDisable(TIMER1_BASE, TIMER_A); ui8Flush_Flag=FLUSH_ON; }

2023-07-11 上传