📄 gpftest.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 + -