📄 main.c
字号:
#include "def.h"
#include "option.h"
#include "2410addr.h"
#include "2410lib.h"
#include "2410slib.h"
#include "timer.h"
#include "mmu.h"
#define FCLK 200000000
#define HCLK (FCLK/2)
#define PCLK (HCLK/2)
#define UCLK 48000000
#define U32 unsigned int
U32 Console_Uart = 0;
U32 Console_Baud = 115200;
void Isr_Init(void);
static void BeepTest(void);
void Main(void)
{ MMU_Init();
SetClockDivider(1, 1);
SetSysFclk(DFT_FCLK_VAL);
Port_Init();
Isr_Init();
Uart_Select(Console_Uart);
Uart_Init(0, Console_Baud);
printf("FS2410XP PWM Test,please Enter 'ESC' to exit\n");
BeepTest(); //PWM 控制
while(1);
}
void Isr_Init(void)
{
// pISR_UNDEF = (U32)HaltUndef;
//pISR_SWI = (U32)HaltSwi;
//pISR_PABORT = (U32)HaltPabort;
//pISR_DABORT = (U32)HaltDabort;
rINTMOD = 0x0; // All=IRQ mode
rINTMSK = BIT_ALLMSK; // All interrupt is masked.
}
static void ChgBeepFreq(void)
{
U16 freq = (PCLK>>7)/rTCNTB0;
if(freq>=10000)
freq = 500;
freq += 100;
rTCNTB0 = (PCLK>>7)/freq;
rTCMPB0 = rTCNTB0>>1; // 50%
rTCON &= ~0x1f;
rTCON |= 0xb; //disable deadzone, auto-reload, inv-off, update TCNTB0&TCMPB0, start timer 0
rTCON &= ~2; //clear manual update bit
}
static void BeepTest(void)
{
int this_tm_event;
rGPBCON &= ~3; //set GPB0 as tout0, pwm output
rGPBCON |= 2;
rTCFG0 &= ~0xff;
rTCFG0 |= 15; //prescaler = 15+1
rTCFG1 &= ~0xf;
rTCFG1 |= 2; //mux = 1/8
rTCNTB0 = (PCLK>>7)/100;
rTCMPB0 = rTCNTB0>>2; // 50%
rTCON &= ~0x1f;
rTCON |= 0xb; //disable deadzone, auto-reload, inv-off, update TCNTB0&TCMPB0, start timer 0
rTCON &= ~2; //clear manual update bit
while (1)
{ ChgBeepFreq();
Delay(2000);
}
rGPBCON &= ~3; //set GPB0 as tout0, pwm output
rGPBCON |= 1;
rGPBDAT &= ~1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -