📄 pwm.c
字号:
#include <string.h>
#include "..\inc\44b.h"
#include "..\inc\44blib.h"
#include "..\inc\timer.h"
////#include "../SOURCE/includes.h" // uC/OS interface
//#include "../inc/44blib.h"
////#include "../inc/def.h"
//#include "../inc/44b.h"
#define READ_COUNT2 (rTCNTO2 & 0xffff)
#define MaxBeepFreq 50000
#define MinBeepFreq 20
#define Fclk 50000000 // 工作频率 50 MHz.
#define OS_TICKS_PER_SEC 200 /* Set the number of ticks in one second */
//extern int Uart_GetIntNum(void);
void SetBeepPwm(unsigned short Freq, unsigned char HiRatio);
void StopBeepPwm(void);
void Init_Timer5 (void);
//void __irq TIMER2_int(void);
void __irq TIMER5_int(void);
//volatile int isWdtInt;
unsigned int pwmcnt=0;
unsigned int OsEnterSum;
//extern int I_ISPC;
/****************************************
* PWM (BEEP) test *
****************************************/
void Test_Pwm(void)
{
Uart_Printf("[pwm (beep) Test]\n");
rINTCON = 5;
rINTMOD = 0;
pISR_TIMER5= (unsigned int)TIMER5_int;
rPDATE = 0x157; //Beep = 10
rPCONE = 0x596b; // tout2
rPUPE = 0xff;
pwmcnt=0;
Init_Timer5();
// while(1)
// {;}
}
void Init_Timer5 (void)
{
#define Prescaler2 25 // CLK = 1MHz.
#define MUX5 0
#define Count Fclk/(2*Prescaler2)/OS_TICKS_PER_SEC
rTCON &= ~(0x07 << 24); // Stop Timer5.
rTCFG0 = (rTCFG0 & ~(0x0ff << 16)) | (Prescaler2 << 16);
rTCFG1 = (rTCFG1 & ~(0x0f << 20)) | (MUX5 << 20);
rTCNTB5 = Count;
rTCON |= (0x06 << 24); // 手动下载周期值,并设置为自动装载.
rTCON = (rTCON & ~(1 << 25)) | (1 << 24) ; // 启动.
rINTMSK &= ~((1 << 26) + (1 << 8)); // 开中断屏蔽及全局屏蔽位.
}
void __irq TIMER5_int(void)
{rI_ISPC |= (1 << 8);
OSIntEnter();
OSTimeTick();
// rI_ISPC=BIT_TIMER5;
Uart_Printf("ok");
OSIntExit();
//// rI_ISPC |= (1 << 8);
// return ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -