?? sysutils.c
字號(hào):
#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
/*
函數(shù)名稱: sysUtilsUSecDelay
功 能: 延遲指定的us數(shù)
參 數(shù): dwUs - 延遲的us數(shù)
返回值 : 無(wú)
*/
void sysUtilsUSecDelay (U32 dwUs)
{
U32 dwCnt;
dwCnt = dwUs * (g_dwMCLK / 4000000);
while(dwCnt--)
{
// if (dwCnt == 1)
// printf ("hello World");
}
}
/*
函數(shù)名稱: sysUtilsDelay
功 能: 延遲指定CPU cycle
參 數(shù): dwTime - 延遲的CPU周期數(shù)
返回值 : 無(wú)
*/
void sysUtilsDelay (U32 dwTime)
{
while (dwTime --);
}
/****************************************************************************
功能 :設(shè)置系統(tǒng)的鎖相環(huán)
參數(shù) :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; //定時(shí)器4/5的預(yù)分頻為16
rTCFG0 |= (16-1)<<16;
rTCFG1 &= 0xff0fffff; //定時(shí)器5的MUX為1/8
rTCFG1 |= 2<<20;
rTCNTB5 = g_dwMCLK/(Freq*16*8); //定時(shí)器5的重裝值,在ENABLE之前設(shè)定
rTCON |= 0x02000000; //定時(shí)器5的MANUAL UPDATE BIT設(shè)為1
rTCON &= 0xf0ffffff; //MANUAL UPDATE BIT清零
rTCON |= 0x05000000; //定時(shí)器5 start, 設(shè)為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
}
/****************************************************************************
功能 :點(diǎn)亮或者熄滅LED燈
參數(shù) :dwLedNo 指定對(duì)哪個(gè)LED操作
: bLight 指定點(diǎn)亮或者熄滅.TRUE 點(diǎn)亮,FALSE熄滅
返回值 :空
****************************************************************************/
void sysUtilsLightLed (U32 dwLedNo, BOOL bLight)
{
switch (dwLedNo)
{
case LED_ALL:
if (TRUE == bLight)
rPDATC |= 0x0E;
else
rPDATC &= ~0x0E;
break;
case LED1:
case LED2:
case LED3:
if (TRUE == bLight)
rPDATC |= MASK_BIT(dwLedNo);
else
rPDATC &= ~MASK_BIT(dwLedNo);
break;
default:
break;
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -