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

📄 timer.c

📁 smdk40100 40mhz test code
💻 C
字号:
#include <string.h>
#include "..\include\k401.h"
#include "..\include\k401lib.h"
#include "..\include\timer.h"

void __irq Timer0Done(void);
void __irq Timer1Done(void);
void __irq Timer2Done(void);
void __irq Timer3Done(void);
void __irq Timer4Done(void);
void __irq TimerFIFOInt(void);
void __irq BT_Int(void);

void Timer3_PWMMode_Test(void);
void Timer4_PWMMode_Test(void);

void Timer_Interval_Test(void);
//void Timer_Capture_Test(void);
//void Timer_MatchOverflow_Test(void);
//void Timer_DMAMode_Test(void);
void Timer_PWMMode_Test(void);

void Test_WDTimer(void);

char timervalue[]={0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0, 0x0};

void *timerfunc[][2]=
{
    (void *)Timer_Interval_Test,	"Interval Test   ",
//    (void *)Timer_Capture_Test,		"Capture Test    ",
//    (void *)Timer_MatchOverflow_Test,	"Match&Over Test ",
//    (void *)Timer_DMAMode_Test,		"DMA Mode Test   ",
    (void *)Timer_PWMMode_Test,		"PWM Mode Test   ",
    (void *)Test_WDTimer,		"WDT Test        ",
    0,0
};

void Test_Timer(void)
{
    int j,i;
    int temp0=0;
    int temp1=0;

    temp0='q'-'a';
    temp1='Q'-'a';

    Uart_Printf("\nKS17C40100 Timer Test Program\n");

    while(1)
    {
	i=0;
	Uart_Printf("=========================================================================\n");
	for(j=0;j<100;j++);
	while(1)
        {
	    Uart_Printf("%c: %s",'a'+i,timerfunc[i][1]);
	    i++;
	    if((int)(timerfunc[i][0])==0){Uart_Printf("\nq: Return to Main Menu\n");break;}
	    if((i%4)==0)Uart_Printf("\n");
	}
	Uart_Printf("=========================================================================\n");
    	Uart_Printf("Select the function to test?");
	i=Uart_Getch()-'a';
	
	if(i==temp0 || i==temp1) break;
        else
	{
	    Uart_Printf("\n");
	    if(i>=0 && (i<(sizeof(timerfunc)/8)) ) 
		( (void (*)(void)) (timerfunc[i][0]) )();
	}
    }
}

void Timer_Interval_Test(void)
{
    Uart_Printf("[Timer0,1,2,3,4 Interval Mode Test]\n");
    Uart_Printf("Check the Match Interrupt\n");
    Uart_Printf("To exit Timer Interval Mode Test, Press any key!!!!\n");

	rTFCON=0x0;		//Timer FIFO Disable
	rTPRE0=0x0;
	rTPRE1=0x0;
	rTPRE2=0x0;
	rTPRE3=0x0;
	rTPRE4=0x0;

	rTDAT0=0x7fff;
	rTDAT1=0x2345;
	rTDAT2=0x3456;
	rTDAT3=0x12;
	rTDAT4=0x34;

	pISR_TMC0=(unsigned)Timer0Done;
	pISR_TMC1=(unsigned)Timer1Done;
	pISR_TMC2=(unsigned)Timer2Done;
	pISR_TMC3=(unsigned)Timer3Done;
	pISR_TMC4=(unsigned)Timer4Done;

	rSYSCON|=BIT_GLOBAL;
	rINTMSK=(BIT_TMC0|BIT_TMC1|BIT_TMC2|BIT_TMC3|BIT_TMC4);
	//rINTMSK=(BIT_TMC0);
	Led_Display(0xf);

	rTCON0=0x80;
	rTCON1=0x80;
	rTCON2=0x80;
	rTCON3=0x80;
	rTCON4=0x80;

    while(Uart_Getch()==0)Led_Display(0xf);

    rTCON0=0x0;
    rTCON1=0x0;
    rTCON2=0x0;
    rTCON3=0x0;
    rTCON4=0x0;

    rSYSCON&=~(BIT_GLOBAL);
    rINTMSK=0x40;
}

void Timer_PWMMode_Test(void)
{
    int ch;

	Uart_Printf("\nTimer3,4 PWM Mode Test\n");
    	Uart_Printf("\nSelect channel of Timer......[3] or [4]");

    	ch=Uart_Getch()-'3';

    	if(ch==0) Timer3_PWMMode_Test();
    	else Timer4_PWMMode_Test();

}

void Timer3_PWMMode_Test(void)
{
    Uart_Printf("[Timer3 PWM Mode Test]\n");
    Uart_Printf("Check the output signal of PIN13\n");
    Uart_Printf("To exit Timer Interval Mode Test, Press any key!!!!\n");

    rSYSCON&=~(BIT_GLOBAL);

    rPCON0|=(0x2<<5);

    rTPRE3=(MCLK*2/1000000-1);
    rTDAT3=0x7f;
    rTCON3=0x8b;

    Uart_Getch();
    rTCON3=0x0;
}

volatile char *pti;
void Timer4_PWMMode_Test(void)
{
//    int temp=0;
//    int i;
    Uart_Printf("[Timer4 PWM Mode Test]\n");
    Uart_Printf("Check the output signal of PIN14\n");
    Uart_Printf("To exit Timer PWM Mode Test, Press any key!!!!\n");

    pti=timervalue;
    rPCON0|=(0x2<<7);

    rTPRE4=0xff;
    rTDAT4=0x7f;
    rTCON4=0x8b;

    Uart_Getch();
    rTCON4=0x0;

    Uart_Printf("[Timer4 FIFO PWM Mode Test]\n");
    Uart_Printf("Check the output signal of PIN14\n");
    Uart_Printf("To exit Timer FIFO PWM Mode Test, Press any key!!!!\n");


    rTPRE4=(MCLK*2/1000000-1);
    rTFCON=0x9;

    pISR_TF=(unsigned)TimerFIFOInt;

    rSYSCON|=BIT_GLOBAL;
    rINTMSK=BIT_TF;
    rTCON4=0x8b;
//    for(i=0;i<15;i++)
//    {
//	Uart_Printf("Test pti=0x%x, *pti=0x%x\n",pti+i,*(pti+i));
//	i++;
//    }


//    temp=rTFSTAT&0x7;
    rDMASRC0=(int)pti;
    rDMADST0=0x3ff904b;
    rDMACNT0=0x5;
    rDMACON0=0x0841;
//    while(1);
//    while(!(rTFSTAT & 0x8))
//    {
//	rTFW4=timervalue[k];
//	k++;
//	Uart_Printf("Test: TFSTAT=0x%x, TFW4=0x%x, k=%d\n",rTFSTAT,rTFW4,k);
//	if(timervalue[k]==0x0)k=0;
//    }

//    k=5;


    Uart_Getch();
    rSYSCON&=~(BIT_GLOBAL);
    rTCON4=0x0;
}

volatile int isBTInt;

void Test_WDTimer(void)
{
    Uart_Printf("[WatchDog Timer Test]\n");

    isBTInt=0;
	
    rBTCON=0xa503;

    rINTPND=0x0;
    rSYSCON|=BIT_GLOBAL;
    rINTMSK=BIT_BT;
    pISR_BT=(unsigned)BT_Int;

    while(isBTInt!=10);

    Uart_Printf("\nI will restart after 335.54ms!!!\n");
    rBTCON=0xa603;
    rSYSCON&=~BIT_GLOBAL;

    while(1);
}

void __irq Timer0Done(void)
{
    rINTPND=~(BIT_TMC0);
    Led_Display(0x1);
}

void __irq Timer1Done(void)
{
    rINTPND=~(BIT_TMC1);
    Led_Display(0x2);
}

void __irq Timer2Done(void)
{
    rINTPND=~(BIT_TMC2);
    Led_Display(0x4);
}

void __irq Timer3Done(void)
{
    rINTPND=~(BIT_TMC3);
    Led_Display(0x8);
}

void __irq Timer4Done(void)
{
    rINTPND=~(BIT_TMC4);
    Led_Display(0x9);
}

void __irq TimerFIFOInt(void)
{
    int temp=0;
    rINTPND=~(BIT_TF);

    temp=rTFSTAT&0x7;
    Uart_Printf("Test temp=0x%x, pti=0x%x\n",temp, pti);
    rDMASRC0=(int)(pti);
    rDMADST0=0x3ff904b;
    rDMACNT0=0x5-temp;
    rDMACON0=0x0841;
    pti+=(0x5-temp);
}

void __irq BT_Int(void)
{
    rINTPND=~(BIT_BT);
    Uart_Printf("%d",++isBTInt);
}

⌨️ 快捷键说明

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