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

📄 gpftest.c

📁 2410一些基本试验的源码
💻 C
字号:
/*C语言函数*/
/*端口F寄存器预定义*/
#include "2410addr.h"
#include "2410lib.h"
#include "timer.h"
int l=0;
void __irq timer0Handler(void);

void INT_Timer_Initialize(void)
{
	
 /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
 /*                                                                 */
 /*     Fout(s)=[(prescaler+1)*(TCNTB+1)]/[pclk*divider]=40ms       */
 /*                                                                 */
 /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
	rTCFG0=0x64; 	//prescaler0 100
	rTCFG1=0x01; 	//divide value 1/4
	rTCNTB0=5000;	//TCNTB=5000
	rTCON=0x0a;  	//auto load, invert off, manual update, stop timer
	//rTCFG0= rTCFG0 & ~0xff|(255<<0); //prescaler = 15,预分频值
	//rTCFG1= rTCFG1 & ~0xf0|(1<<4);//divider = 1/8,定时器多路选择

	//rTCNTB1 =0xfd9c;//rTCNTB0=PCLK/{(prescaler+1) * divider *freq
	       
	//rTCON = rTCON &~0xf00|1<<11|0<<10|1<<9|1<<8;//10010000 1011 0000 0000
	/*INTIALIZE THE INTERRUPT*/
	//rINTMOD=0x0;  	//all irq
	rINTMSK=0xffffffff; 	 //disable all interrupt source
	rINTSUBMSK=0xffff; 		//disable all sub interrupt source
}


/* open the interrupt timer0 and eint0 */
void ENABLE_INTERRUPT(void)
{
	rINTMSK=~(BIT_TIMER0);
	rTCON=0x09;
}


int Main()
{
             
    SetClockDivider(1, 1);
	SetSysFclk(DFT_FCLK_VAL);
	Port_Init();
		
	Uart_Select(0);
	Uart_Init(0, UART_BAUD);
	
    rGPFCON=0x5500;//GPF4--GPF7设置为output
	rGPFUP=0;   //disable GPF pull up
	rGPFDAT=0xff;
	
    //timer0初始化
    INT_Timer_Initialize();	
	/*INTIALIZE THE INTERRUPT*/

	//建立中断向量表
	pISR_TIMER0=(unsigned)timer0Handler;
	
	//开中断
	ENABLE_INTERRUPT();
	
	Uart_Printf("the main is running\n");
 
    while(1)
    {
       
        if(l==2)
        {
        
        Uart_Printf("the main is running\n");
    	rGPFDAT=~rGPFDAT;
    	l=0;
    	}
    	
    }
   //{
     //Uart_Printf("the main is running\n");
     //Delay(1000);
   //}
}


void __irq timer0Handler(void)
{
    printf("timer0 is running.\n");
    l++;
    printf("%d \n",l);
    ClearPending(BIT_TIMER0);
}

/*
	void timer1(void)
	{
		l++;
		Uart_Printf("TIMER1 is occurred.\n");
	    rTCON &= ~(1<<9); //clear manual update bit
	    ClearPending(BIT_TIMER1);
	    
	}
	int Main()
	{
		   rGPFCON=0x5500;//GPF4--GPF7设置为output
		   rGPFUP=0;   //disable GPF pull up
		   rGPFDAT=0xff;
	       rGPFCON=0x5500;//GPF4--GPF7设置为output
	       rGPFUP=0;   //disable GPF pull up
	        
	        ClearPending(BIT_TIMER1);
	        
		    rTCFG0= rTCFG0 & ~0xff|(255<<0); //prescaler = 15,预分频值
	        rTCFG1= rTCFG1 & ~0xf0|(1<<4);//divider = 1/8,定时器多路选择

	        rTCNTB1 =0xfd9c;//rTCNTB0=PCLK/{(prescaler+1) * divider *freq
	       
	        rTCON = rTCON &~0xf00|1<<11|0<<10|1<<9|1<<8;//10010000 1011 0000 0000
	        
		 rSRCPND|=(BIT_TIMER1);
		    rINTMSK=~(BIT_TIMER1);
		    rINTPND|=(BIT_TIMER1);
		    
		    rINTMOD=0x0;  	//all irq
		    rINTMSK=0xffffffff; 	 //disable all interrupt source
		    rINTSUBMSK=0xffff; 		//disable all sub interrupt source
		    
		    pISR_TIMER1=(unsigned)timer1;
		    
		    rINTMSK=~(BIT_TIMER0);
		    rTCON=0x09;
	   while(1)
	    {
	    if(l==5)
	    {
	    	rGPFDAT=~rGPFDAT;
	    }
	      int i;
	      // int nOut=0xf0;
	        rGPFDAT=0xf0;
	       //delay(0xFffff);
	       for(i=0;i<2000000;i++);
	       rGPFDAT=0x70;
	       //delay(0xFffff);
	       for(i=0;i<1000000;i++);
	       rGPFDAT=0x30;
	       //delay(0xFffff);
	       for(i=0;i<1000000;i++);
	       rGPFDAT=0x10;
	       //delay(0xFffff);
	       for(i=0;i<1000000;i++);
	       //GPFDAT=(GPFDAT&0xFFFFFF0F)|0xF0;
	       rGPFDAT=0x00;
	       for(i=0;i<1000000;i++);
	      
	       rGPBCON = rGPBCON & ~(3<<0)|(1<<1);//set GPB0 as tout0, pwm output
		   
		   rTCFG0 = rTCFG0 & ~0xff|15; //prescaler = 15
		   rTCFG1 = rTCFG1 & ~0xf|2;//divider = 1/8
		   
		   rTCNTB0 = (PCLK>>7)/i;//rTCNTB0=PCLK/{(prescaler+1) * divider *freq}
		   rTCMPB0 = rTCNTB0>>1; //占空比50%
		   
			//disable deadzone, auto-reload, inv-off, update TCNTB0&TCMPB0, start timer 0
		   rTCON = rTCON & ~0x1f|(0<<4)|(1<<3)|(0<<2)|(1<<1)|(1);
		   rTCON &= ~(1<<1); //clear manual update bit

 
		   	  

	       for(i=0;i<10000000;i++);
		   Uart_Printf("%dover",j);
		   if(j==20)
		   {  
		    
				   for(k=0;k<20000;k=+10)
				   {
				       if(k==1990)k=0;
				       rGPBCON=(rGPBCON&(0<<0))|(1<<1);
				  	   rTCFG0= rTCFG0 & ~0xff|15; //prescaler = 15,预分频值
				       rTCFG1= rTCFG1 & ~0xf|2;//divider = 1/8,定时器多路选择
				     
				       rTCNTB0 = (PCLK>>7)/5;//rTCNTB0=PCLK/{(prescaler+1) * divider *freq
				       rTCMPB0=rTCNTB0>>1;//占空比,自己定,右移几位就是除以2的几次方
				       
				       rTCON = (rTCON &( ~0x1f))|(11<<0);
					   rTCON &= ~(1<<1); //clear manual update bit
					   
					}      
		   }
		
	       rGPFDAT=0x00;
	       //delay(0xFffff);
	       for(i=0;i<1000000;i++);
	       rGPFDAT=0x10;
	       //delay(0xFffff);
	       for(i=0;i<1000000;i++);
	       rGPFDAT=0x30;
	       //delay(0xFffff);
	       for(i=0;i<1000000;i++);
	       //GPFDAT=(GPFDAT&0xFFFFFF0F)|0xF0;
	       rGPFDAT=0x70;
	       for(i=0;i<1000000;i++);
	 }
*/
 

⌨️ 快捷键说明

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