欢迎来到天天文库
浏览记录
ID:20516237
大小:26.00 KB
页数:3页
时间:2018-10-13
《s3c2410pwm定时器中断实验》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验6S3C2410PWM定时器中断实验一、实验目的掌握S3C2410PWM定时器的工作原理和定时时间的计算方法,掌握和PWM定时器有关寄存器的使用方法,会用C语言对PWM定时器进行初始化编程,理解PWM定时器中断的触发过程,熟练掌握和中断相关寄存器的使用以及中断服务函数的编程方法。二、实验内容UP-NETARM2410实验箱上两个LED数码管的控制地址为0x08000110和0x08000112。借助于PWM定时计数器可实现简单的计数秒表。由于只有两位数码管,秒表计到99秒后,从0开始重新计数。同时三个发光二极管每隔一秒闪烁点亮。三、PWM定时器相
2、关知识S3C2410A具有5个16位的定时器,其中定时器0~3具有PWM波发生功能,即可以输出PWM波,定时器4没有外部输出。定时器工作频率为PCLK/(预分频值+1)/分频值,在下面的工程中,将使用定时器1,并设置其工作频率为20 kHz,即为:48MHz/(149+1)/16=20 kHz所以定时时间为:0x4E20*20 kHz=1S定时器1的初始化方法如下: 首先,设置TCFG0(定时器配置寄存器0,地址为0x51000000)的值为0x95,即定时器1的预分频值为0x95,十进制数为149。注意:定时器0和1共用同一个预分频值。 然后,
3、设置TCFG1(定时器配置寄存器1,地址为0x51000004)的值为0x30,即定时器1的分频值为16。 其次,设置TCNTB1(定时器1计数寄存器,地址为0x51000018)和TCMPB1(定时器1比较寄存器,地址为0x5100001C)的值为0x4E20和0x4000。这里没有用到TCMPB1,当TCNTB1减计数到0后,将触发定时器1中断再次,设置TCON(定时器控制寄存器,地址为0x51000008)的值为0xA00,即刷新TCNB1和TCMPB1的值。最后,设置TCON的值为0x900,启动定时器1。四、参考程序(1)PWM定时初始化
4、程序段34voidinitTimer1(void) 35{36TCFG0=0x95; //prescale=119 37TCFG1=0x30; //divider=1/16 38TCNTB1=0x4E20-1;//counternumber=0x4E1F 39TCMPB1=0x4000; 40TCON=0xA00;//updateTCNTB1andTCMPB1 41TCON=0x900;//StartTimer1 42}(2)开PWM定时中断程序段voidopenTimer1(void)46{ 47INTMOD=0x0; /
5、/setasIRQ 48INTMSK&=~(0x800);//openTimer1 49 PRIORITY=0x7F; 50}(3)PWM定时器中断服务程序段54__irqvoidc_Timer1_ISR() 55{ 5657intiReg=0; 58if(SRCPND
6、0x800)//mustchangefrom0x200to0x800 59SRCPND=0x800; 60if(INTPND
7、0x800)//mustchangefrom0x200to0x800 61INTPND=0x800; 62//INTMSK
8、=0xFFFF
9、FFFF;//closeall,includeTimer1 63nLED=0; 64switch(number) 65{ 66case0:67nLED^=(LED2_MASK
10、LED3_MASK);//LED1light 68break; 69case1: 70nLED^=(LED1_MASK
11、LED3_MASK); //LED2light 71break; 72case2: 73nLED^=(LED1_MASK
12、LED2_MASK); //LED3light 74break; 75} 76numbe
13、r++;77if(number>2) 78number=0; 79GPCDAT_ADDR=nLED;//Ledshineinturn 80 81//Seg7LEDcountseachsecond 82if(nCnt>=100) 83nCnt=0; 84Seg7A=seg7val[nCnt/10]; 85Seg7B=seg7val[nCnt%10]; 86nCnt++;五、实验结果和思考题请自己作答。怎么样改变定时时间??六、实验心得体会
此文档下载收益归作者所有