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

📄 main.c

📁 一个PWM程序
💻 C
字号:
#include "44b0x.h"
#include "console.h"
#include "ctrl_set.h"
#include "irqsrc.h"

extern U32 MCLK;

U32 pIrqStart, pIrqFinish, pIrqHandler;

TIME_STRUC SysTime;
U16	SERIAL_BAUD = 57600;
char table_begin[] = "/***************************************************************/\n";

/*********************************************************/
void ShowSysClock(int argc, char *argv[])
{
	printf("System is running @%dHz\n", MCLK);	
}

/*********************************************************/
void InitOSTimer(U8 Freq)
{
#define	MaxOSTimerFreq	200
#define	MinOSTimerFreq	10
	if(Freq>MaxOSTimerFreq)
		Freq = 100;
	if(Freq<MinOSTimerFreq)
		Freq = 100;	
	InitSysTimer(Freq);
}

extern	PrVoid *IrqHandlerTab;

void IrqHandler(int num)
{
	if(IrqHandlerTab[num])
		(IrqHandlerTab[num])();
}

#define	MAX_TIMER_CNT	100
U32 TimerDly[MAX_TIMER_CNT];
U32 TimerRld[MAX_TIMER_CNT];
U32 TimerCnt = 0;

int SetTimer(U32 dly)
{
	if(TimerCnt>=MAX_TIMER_CNT)
		return -1;
	TimerRld[TimerCnt] = dly;
	TimerDly[TimerCnt] = dly;
	
	TimerCnt++;
	return TimerCnt-1;		
}

void ISR_Timer5(void)
{
	U32 i;
	
	for(i=0;i<TimerCnt;i++)
	{
		TimerDly[i]--;
		if(!TimerDly[i])
			TimerDly[i] = TimerRld[i];
	}
	
}

void ISR_Uart0Rx(void)
{
	U8 ch;
	
	ch = RdURXH0();		//必须读出后下次接收才能产生中断
	WrUTXH0('@');
}

void ARMEnableInt(void);
void ARMDisableInt(void);
/*********************************************************/
int main(void)
{
	U16 BeepFreq = 1000;	
	
	ChangePllValue(88, 6, 1);	//修改系统主频为6倍频
	PortInit();
	console_init(SERIAL_BAUD);	
	
	next_line();
	puts(table_begin);		
	ShowSysClock(0, NULL);	
	printf("Serial Baud rate is %d\n", SERIAL_BAUD);
	puts("Build date:");
	puts(__DATE__);
	putch('-');
	puts(__TIME__);
	next_line();
	puts(table_begin);
	
	SysTime.year    = 3;
	SysTime.month   = 7;
	SysTime.day     = 2;
	SysTime.weekday = 3;
	SysTime.hour    = 0x17;
	SysTime.min     = 0x09;
	SysTime.sec     = 0;
	
	RtcSetDay(&SysTime);
	RtcSetTime(&SysTime);
	
	pIrqHandler = (U32)IrqHandler;
	IrqHandlerTab[INT_TIMER5] = ISR_Timer5;
	rINTCON = 0x5;		// non vector mode, enable IRQ, disable FIQ
	rINTMOD = 0x0;		// all interrupts are IRQ mode
	
//	InitOSTimer(0);
//	EnableIrq(INT_TIMER5);
//	EnableIrq(INT_GLOBAL);
//	ARMEnableInt();		
	
	puts("System Initialized.\n");	
	puts("press '+' to add freq, '-' to dec freq\n");			
	
	while(1)
	{
		U8 key;		
		
		key = getch();
		putch(key);
		if(key=='+')
			if(BeepFreq<20000)
				BeepFreq += 100;
		if(key=='-')
			if(BeepFreq>100)
				BeepFreq -=100;									
		
		SetBeepPwm(BeepFreq, 50);
		printf("Now beep frequence is %d\n", BeepFreq);
		Delay(2000000);
		StopBeepPwm();
		
	}			
  
}

⌨️ 快捷键说明

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