📄 sysutils.c
字号:
#include "..\inc\44b0x.h"
#include "..\inc\uTypes.h"
#include "..\inc\sysUtils.h"
#include "..\inc\console.h"
#define EXT_OSC_CLK 10000000
U32 g_dwMCLK = 20000000; //初始值20MHz
/*
函数名称: sysUtilsUSecDelay
功 能: 延迟指定的us数
参 数: dwUs - 延迟的us数
返回值 : 无
*/
void sysUtilsUSecDelay (U32 dwUs)
{
U32 dwCnt;
dwCnt = dwUs * (g_dwMCLK / 4000000);
while(dwCnt--)
{
// if (dwCnt == 1)
// printf ("hello World");
}
}
/*
函数名称: sysUtilsDelay
功 能: 延迟指定CPU cycle
参 数: dwTime - 延迟的CPU周期数
返回值 : 无
*/
void sysUtilsDelay (U32 dwTime)
{
while (dwTime --);
}
/****************************************************************************
功能 :设置系统的锁相环
参数 :nMDiv ----
:nPDiv ----
:nSDiv ----
返回值 :空
****************************************************************************/
STATUS sysUtilsSetPllValue (int nMDiv, int nPDiv, int nSDiv)
{
int i = 1;
rPLLCON = (nMDiv<<12)|(nPDiv<<4)|nSDiv;
while(nSDiv--)
i *= 2;
g_dwMCLK = (EXT_OSC_CLK*(nMDiv+8))/((nPDiv+2)*i);
return STATUS_OK;
}
STATUS sysUtilsSetMainClk (U32 nMCLK)
{
if (0 == nMCLK)
{
return STATUS_ERR;
}
g_dwMCLK = nMCLK;
return STATUS_OK;
}
void InitSysTimer(U8 Freq)
{
rTCON &= 0xf0ffffff; //clear manual update bit, stop Timer 5
rTCFG0 &= 0xff00ffff; //定时器4/5的预分频为16
rTCFG0 |= (16-1)<<16;
rTCFG1 &= 0xff0fffff; //定时器5的MUX为1/8
rTCFG1 |= 2<<20;
rTCNTB5 = g_dwMCLK/(Freq*16*8); //定时器5的重装值,在ENABLE之前设定
rTCON |= 0x02000000; //定时器5的MANUAL UPDATE BIT设为1
rTCON &= 0xf0ffffff; //MANUAL UPDATE BIT清零
rTCON |= 0x05000000; //定时器5 start, 设为INTERVAL模式
}
#define MaxBeepFreq 20000
#define MinBeepFreq 20
void SetBeepPwm(U16 Freq, U8 HiRatio)
{
if(Freq>MaxBeepFreq)
Freq = MaxBeepFreq;
if(HiRatio>100)
HiRatio = 100;
rTCON &= 0xffff0fff; // clear manual update bit, stop Timer2
rTCFG0 &= 0xffff00ff; // set Timer 2&3 prescaler 0
rTCFG1 &= 0xfffff0ff; // set Timer 2 MUX 1/16
rTCFG1 |= 0x00000300;
rTCNTB2 = g_dwMCLK/(Freq*16); //if set inverter off, when TCNT2<=TCMP2, TOUT is high, TCNT2>TCMP2, TOUT is low
rTCMPB2 = (rTCNTB2*(100-HiRatio))/100; //if set inverter on, when TCNT2<=TCMP2, TOUT is low, TCNT2>TCMP2, TOUT is high
rTCON |= 0x00002000; // manual update
rTCON &= 0xffff0fff; // clear manal update bit
rTCON |= 0x0000d000; // auto reload, inverter on, start Timer 5
}
/****************************************************************************
功能 :点亮或者熄灭LED灯
参数 :dwLedNo 指定对哪个LED操作
: bLight 指定点亮或者熄灭.TRUE 点亮,FALSE熄灭
返回值 :空
****************************************************************************/
void sysUtilsLightLed (U32 dwLedNo, BOOL bLight)
{
switch (dwLedNo)
{
case LED_ALL:
if (TRUE == bLight)
rPDATC |= 0x07;
else
rPDATC &= ~0x07;
break;
case LED1:
case LED2:
case LED3:
if (TRUE == bLight)
rPDATC |= MASK_BIT(dwLedNo);
else
rPDATC &= ~MASK_BIT(dwLedNo);
break;
default:
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -