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

📄 main.c

📁 S3C44B0X内部共有6个16位的定时器单元这个实验把所有的定时器都用中断方式测试。
💻 C
字号:
/***************************************************************
    实验内容:了解定时器的工作原理
	 		  定时器中断的编程
   	实验要求:连接PC机的超级终端到Hm701Esp的串口0
   	参考文档:\datasheet\s3c44box\timer.pdf	 
    
    Vision:1.1   Himai Tech
 ***************************************************************/



#include "44b.h"

#include "44blib.h"            //程序中Delay(),Uart_Printf(),Uart_getch()


/* Timer0~Timer5 的中断处理 */
void __irq Timer0Done(void);
void __irq Timer1Done(void);
void __irq Timer2Done(void);
void __irq Timer3Done(void);
void __irq Timer4Done(void);
void __irq Timer5Done(void);

/* Tick计数器 */
volatile int variable0,variable1,variable2,variable3,variable4,variable5;




/****************************************
 *  Timer中断方式测试函数				*
 ****************************************/
void Test_TimerInt(void)
{

    variable0=0;variable1=0;variable2=0;variable3=0;variable4=0;variable5=0;

	//开放Timer0~Timer5的中断屏蔽位、并赋值中断入口函数地址
    rINTMSK=~(BIT_GLOBAL|BIT_TIMER0|BIT_TIMER1|BIT_TIMER2|BIT_TIMER3|BIT_TIMER4|BIT_TIMER5);
    pISR_TIMER0=(int)Timer0Done;
    pISR_TIMER1=(int)Timer1Done;
    pISR_TIMER2=(int)Timer2Done;
    pISR_TIMER3=(int)Timer3Done;
    pISR_TIMER4=(int)Timer4Done;
    pISR_TIMER5=(int)Timer5Done;

    Uart_Printf("[Timer0/1/2/3/4/5 Interrupt Test]\n");

    rTCFG0=0xf0f0f;	//dead zone=0,pre2=0xf,pre1=0xf,pre0=0xf 分频设置
    rTCFG1=0x01234;	//都工作在中断方式 mux5=1/2,mux2=1/2,mux3=1/4,mux2=1/8,mux1=1/16,mux0=1/32
    
    rTCNTB0=0xffff;	//(1/(64MHz/15/32))*0xffff=0.48s 计数缓存器
    rTCNTB1=0xffff;	//(1/(64MHz/15/16))*0xffff=0.24s
    rTCNTB2=0xffff;	//(1/(64MHz/15/8 ))*0xffff=0.12s
    rTCNTB3=0xffff;	//(1/(64MHz/15/4 ))*0xffff=0.06s
    rTCNTB4=0xffff;	//(1/(64MHz/15/2 ))*0xffff=0.03s
    rTCNTB5=0xffff;	//(1/(64MHz/15/2 ))*0xffff=0.03s

    rTCON=0x2222202;	//update T5/T4/T3/T2/T1/T0
    rTCON=0x5999901;	//T5/T4/T3/T2/T1=auto reload,T0=one shot,all_start

    while(variable0==0);  //等待最慢的Timer0发生一次中断,来看其它的定时器Tick计数     
	
	Delay(1);	    //补偿100us
	
    rTCON=0x0;		//停止所有的定时器


	//应为预期值16、16、8、4、2、1
    if(variable5==16 && variable4==16 && variable3==8 && variable2==4 && variable1==2 && variable0==1)
		Uart_Printf("Timer0/1/2/3/4/5 interrupt Test --> OK\n");
    else
		Uart_Printf("Timer0/1/2/3/4/5 interrupt Test --> Fail\n");
		
    Uart_Printf("Timer0-%d(1),Timer1-%d(2),Timer2-%d(4),Timer3-%d(8),Timer4-%d(16),Timer5-%d(16)\n",
				variable0,variable1,variable2,variable3,variable4,variable5);

    rINTMSK=BIT_GLOBAL;     //禁止所有中断
}



void __irq Timer0Done(void)
{
    rI_ISPC=BIT_TIMER0;
    variable0++;    
}

void __irq Timer1Done(void)
{
    rI_ISPC=BIT_TIMER1;
    variable1++;    
}

void __irq Timer2Done(void)
{
    rI_ISPC=BIT_TIMER2;
    variable2++;    
}

void __irq Timer3Done(void)
{
    rI_ISPC=BIT_TIMER3;
    variable3++;    
}

void __irq Timer4Done(void)
{
    rI_ISPC=BIT_TIMER4;
    variable4++;    
}

void __irq Timer5Done(void)
{
    rI_ISPC=BIT_TIMER5;
    variable5++;    
}



void Main(void)
{
	_44blib_init();   //初始化实用程序库
	
	Test_TimerInt();

    while(1);
}

⌨️ 快捷键说明

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