📄 fun.c
字号:
#include "global.c"
void KickDog();
void OSTickInit();
void SystemInit();
void vInitSpiBus();
void SystemInit()
{
asm(" SETC INTM "); /* 关闭总中断 */
asm(" CLRC SXM "); /* 禁止符号位扩展 */
asm(" CLRC CNF "); /* B0块映射为 on-chip DARAM*/
asm(" CLRC OVM "); /* 累加器结果正常溢出*/
SCSR1=0x83FE; /* 打开ADC,EVA,EVB,CAN和SCI的时钟,系统时钟CLKOUT=40M */
WDCR=0x006F; /* 禁止看门狗,看门狗时钟64分频 */
KickDog(); /* 初始化看门狗 */
IFR=0xFFFF; /* 清除中断标志 */
// XINT2CR=0001; /*高优先级,下降沿有效*/
IMR=0x0003; /* 打开中断1,2*/
IFR=0xFFFF; /* 清除中断标志 */
}
/****************************************************************************
*
* NAME: vInitSpiBus
*
****************************************************************************/
void vInitSpiBus()
{
/* Set SPI master to use auto slave select at 4MHz */
MCRB=MCRB | 0x0014; //SPISIMO,SPICLK特殊功能方式
SPICCR=0x0047;
SPICTL=0x0006; //禁止中断
SPIBRR=0x0004; //4M波特率,40M/10=4M
SPICCR=SPICCR | 0x80;
}
void OSTickInit() /*定时器1作为系统的时钟节拍*/
{
EVAIMRA=0x0080; /* 定时器1周期中断使能 */
EVAIFRA=0xFFFF; /* 清除中断标志 */
GPTCONA=0x0000;
/*GPTCONA
bit 15 0: reserved
bit 14 0: T2STAT, read-only
bit 13 0: T1STAT, read-only
bit 12-11 00: reserved
bit 10-9 00: T2TOADC, 00 = no timer2 event starts ADC
bit 8-7 10: T1TOADC, 10 = timer1 periodic interrupt event starts ADC
bit 6 0: TCOMPOE, 0 = Hi-z all timer compare outputs
bit 5-4 00: reserved
bit 3-2 00: T2PIN, 00 = forced low
bit 1-0 00: T1PIN, 00 = forced low
*/
T1PR=40000; /* 定时器1初值,定时1ms */
T1CNT=0x0000;
T1CON=0x104C; /* 连续增计数模式 16M/16=1M*/
}
void KickDog() /*踢除看门狗 */
{
WDKEY=0x5555;
WDKEY=0xAAAA;
}
// AD初始化子程序
void ADINIT()
{
T4CNT=0X0000; // T4计数器清0
T4CON=0X104C; // T4为连续增计数模式,128分频,且选用内部时钟源
T4PR=12500; // 设置T4的周期寄存器
GPTCONB=0X400; // T4周期中断标志触发AD转换
EVBIMRB=0x0000; /* 定时器4周期中断 */
EVBIFRB=0X0FFFF; // 清除EVB中断标志,写"1"清0
ADCTRL1=0X10; // 采样时间窗口预定标位ACQ PS3-ACQ PS0为0,
// 转换时间预定标位CPS为0,AD为启动/停止模式,排
// 序器为级连工作方式,且禁止特殊的两种工作模式
ADCTRL2=0X8404; // 可以用EVB的一个事件信号触发AD转换,
// 且用中断模式1
MAXCONV=0X0F; // 16通道
CHSELSEQ1=0X3210;
CHSELSEQ2=0X7654;
CHSELSEQ3=0X0BA98;
CHSELSEQ4=0X0FEDC; // 转换通道是0-15
}
// 启动AD转换子程序(通过启动定时器4的方式间接启动)
void ADSOC()
{
T4CON=T4CON|0X40; // 启动定时器4
}
void ADEOC()
{
T4CON = T4CON&0X0FFBF; //STOP T4
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -