⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 experiment_1.c

📁 基于ARM核的s3c44BOX应用程序试用定时器Timer5
💻 C
字号:
/**********************************************************************

实验一 Timer 实验(查询方式)
       在led上循环显示 "0", ... "f",间隔时间: 1s.

**********************************************************************/
#include <string.h>
#include "..\inc\option.h"
#include "..\inc\44b.h"
#include "..\inc\44blib.h"
#include "..\inc\def.h"
#include "..\inc\timer.h"

/*Timer5 初始化
入口参数:Timing_count=定时时间常数,定时时间=定时时间常数*0.02 ms 
		  T5_int_Enable=1,T5 中断方式,T5_int_Enable=0,T5 查询方式

Timer input clock Frequency = MCLK / {prescaler value + 1} / {divider value}
{prescaler value} = 0-255
{divider value} = 2, 4, 8, 16, 32	
rTCFG0 [23:16]:These 8 bits determine prescaler value for Timer 4 & 5
Timer input clock Frequency = MCLK / {prescaler value + 1} / {divider value}
							=40 MHz/(199+1)/4=0.05 MHz 
1/0.05 MHz=0.02 ms 
定时时间=定时时间常数*0.02ms
延时1s   定时时间常数=1s/0.02ms= 50000
rTCFG1 [23:20]:MUX 5  Select MUX input for PWM Timer5.
        0000 = 1/2 0001 = 1/4 0010 = 1/8
        0011 = 1/16 01xx = EXTCLK
*/
    
void Timer_Init(U16 timing_count,U8 T5_int_Enable)
	{
		rINTMSK=BIT_GLOBAL|BIT_TIMER5;  
		rTCFG0=0X0c70101;//prescaler=199  rTCFG0=0X010101;prescaler=1
		rTCFG1=0X0100000; // DIV=4        

		rTCNTB5=timing_count;
		//rTCMPB5=(timing_count/2); havn't rTCMPB5!!! but T0--T4 have.
		
		rTCON=0X2000000;
		rTCON=0X5000000;

		if(T5_int_Enable)
		{
	 		rINTCON=0X05;
			rINTMOD=0X0;
			rINTMSK=~(BIT_GLOBAL|BIT_TIMER5);
		}
	}

/*******************************************************************

在led上显示 "0", ... "f"
入口参数:data=显示数字
********************************************************************/

void Led_Display(unsigned char data)
{
    unsigned char * ledbuffer = (unsigned char *)led_Address;
    
    switch(data){
    case 0:
    	*ledbuffer=0x12;
    	break;
    case 1:
    	*ledbuffer=0x9F;
    	break;
    case 2:
    	*ledbuffer=0x31;
    	break;
    case 3:
    	*ledbuffer=0x15;
    	break;
    case 4:
    	*ledbuffer=0x9C;
    	break;
    case 5:
    	*ledbuffer=0x54;
    	break;
    case 6:
    	*ledbuffer=0x50;
    	break;
    case 7:
    	*ledbuffer=0x1F;
    	break;
    case 8:
    	*ledbuffer=0X10;
    	break;
    case 9:
    	*ledbuffer=0x14;
    	break;
    case 0xa:
    	*ledbuffer=0x8;
    	break;
    case 0xb:
    	*ledbuffer=0xC0;
    	break;
    case 0xc:
    	*ledbuffer=0x62;
    	break;
    case 0xd:
    	*ledbuffer=0x81;
    	break;
    case 0xe:
    	*ledbuffer=0x60;
    	break;
    case 0xf:
    	*ledbuffer=0x68;
    	break;
    }
}

/************************************************************

在led上循环显示 "0", ... "f",间隔时间: 1s.

*************************************************************/
void Main(void)
{
    U8 i;
    while(1)
  {
	for(i=0; i<16; i++)
	{ 
		Timer_Init(50000,0);//定时常数=50000,查询方式,延时时间=1s
		while(rTCNTO5);     //查询,到 1s? 等待。
		Led_Display(i);		//显示 i (i=0,1, ... ,f.)
		
	}
  }
}









⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -