📄 init_sys.c
字号:
#include "all.h"
void SMBus_Init();
void SYSCLK_Init (void);
void PORT_Init (void);
void ADC0_Init (void);
//void Timer0_Init (int counts);
void Timer3_Init (int counts);
void Timer4_Init (int counts); //5ms
void FLASH_INIT(uchar ttt ) ;
//-----------------------------------------------------------------------------
// Global VARIABLES
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// SYSCLK配置
//-----------------------------------------------------------------------------
// 配置系统时钟使用外部晶振22.1184MHz
void SYSCLK_Init (void)
{
int i; // delay counter
OSCXCN = 0x67; // start external oscillator with 0110x111 不分频
// 22.1184MHz crystal
for (i=0; i < 256; i++) ; // XTLVLD blanking interval (>1ms)
while (!(OSCXCN & 0x80)) ; // Wait for crystal osc. to settle
OSCICN = 0x88; // select external oscillator as SYSCLK
// source and enable missing clock
// detector bit7 时钟丢失检测便能
}
// Configure the Crossbar and GPIO ports
void PORT_Init (void)
{
EA=0;
XBR0 = 0x05; //0x2C; // Enable UART0 / smsc
XBR1 = 0x04; //en int0
// XBR2 = 0xc4; //0x44; // Enable crossbar and weak pull-ups,Enable UART1
P0MDOUT = 0; // enable TX0 TX1 as a push-pull output
P1MDOUT = 0; //P1.1 output
P2MDOUT = 0;
P3MDOUT = 0;
P74OUT=0;
P1=0;
P2=0;
P3=0;
P4=0;
P0MDOUT |= 0x7f; //0x11; // enable sda scl TX0 TX1 as a push-pull output
P0|=0x84;
P1MDOUT |= 0x00; //
P1|=0x3f;
P2MDOUT |= 0x80; //
P2|=0x3f;
P3MDOUT |= 0x3e;
P3|=0xa0;
P74OUT|= 0X30; //bit7 bit 6 bit 5 bit4 bit3 bit2 bit1 bit0
//p7H P7L P6H P6L P5H P5L P4H P4L
// 0 0 1 1 0 0 0 0
P7=0XFF;
P6=0X00;
P5=0X1f;
P4=0XF3;
XBR0 = 0x0d; //0x5; // Enable UART0 / smsc
//xbr0.3 cex0
XBR1 = 0x04; //en int0
XBR2 = 0xc4; //0x44; // Enable crossbar and weak pull-ups,Enable UART1
}
void INT0_Init() // CK RING
{
IT0=1 ; // EDGE DOWN
EX0=1;
}
void SMBus_Init()
{
//DISABLE();
SMB0CN = 0x42;
SMB0CR = IIC_SMB0CR;
EIP1=EIP1|0x02; //SMBUS中断为高优先级
EIE1 = EIE1|0x02; //允许SMBUS中断
sm_busy=0;
//ENABLE();
}
void ADC0_Init (void)
{
AMX0CF=0; //sing end
ADC0CN = 0x04; // ADC0 enable; normal tracking
// mode; ADC0 conversions are initiated
// on overflow of Timer3; ADC0 data is
// right-justified
REF0CN = 0x03; // disenable temp sensor, on-chip VREF,
// and VREF output buffer
AMX0SL = 0x00; // Select ain0 sens as ADC mux output
ADC0CF = (SYSCLK/2500000) << 3; // ADC conversion clock = 2.5MHz
ADC0CF |= 0x00; // PGA gain = 1
// EIE2 |= 0x02; // enable ADC interrupts
//DAC0CN = 0x80; // DAC0 Control Register
DAC0L = 0x00; // DAC0 Low Byte Register
DAC0H = 0x00; // DAC0 High Byte Register
//DAC1CN = 0x80; // DAC1 Control Register
DAC1L = 0xFF; // DAC1 Low Byte Register
DAC1H = 0xFF; // DAC1 High Byte Register
}
/**********************************************************************
**函数原型: void Attand_485(void)
**入口参数: Xin_485_b=1
**出口参数: 无
**返 回 值: 无
**说 明: T0定时中断子程序INIT
************************************************************************/
/*
void Timer0_Init (int counts)
{
CKCON|=0x8;
TMOD|=0x1; //16Bit
TH0=(65536-counts)/256;
TL0=(65536-counts)%256;
IE|= 0x2;
TR0=1;
}
*/
/**********************************************************************
**函数原型: void Attand_485(void)
**入口参数: Xin_485_b=1
**出口参数: 无
**返 回 值: 无
**说 明: T3定时中断子程序INIT
************************************************************************/
void Timer3_Init (int counts)
{
TMR3CN = 0x00; // Stop Timer3; Clear TF3; scale 12
// use SYSCLK as timebase
TMR3RL = -counts; // Init reload values
TMR3 = 0xffff; // set to reload immediately
EIE2 &= ~0x01; // disable Timer3 interrupts
// EIE2 |= 0x01;
TMR3CN |= 0x04; // start Timer3
}
/**********************************************************************
**函数原型: void Attand_485(void)
**入口参数: Xin_485_b=1
**出口参数: 无
**返 回 值: 无
**说 明: T4定时中断子程序INIT
************************************************************************/
void Timer4_Init (int counts)
{
CKCON&=0xbf; //tm4=0 12 scale
TH4=(65536-counts)/256;
TL4=(65536-counts)%256;
T4CON|=0x4; //START
RCAP4=65536-counts*SYSCLK/12000 ; //65536-T*1000*SYSCLK/Scale /1000000 T(ms)
//TF4 EXF4 RCLK1 TCLK1 EXEN4 TR4 C/T4 CP/RL4 00000000
// 位7 位6 位 5 位 4 位 3 位 2 位 1 位0
// 0 0 0 0 0 1 0 0
T4CON|=0x4; //START TR4
EIE2|=4; // IE4=1
}
void Tpca_Init ()
{
// 配置PCA
PCA0MD = 0x40; // 禁止CF中断
// PCA时基= SYSCLK
PCA0CPL0 = PWM; // 初始化PCA的PWM
PCA0CPH0 = PWM;
PCA0CPM0 = 0x42; // CCM0为8位PWM方
DIS_PWM ;
PCA0CN = 0x40; // 允许PCA计数器
/*
// PCA0CN = 0x40; // BIT7 CF BIT6 CR Clear TF3;
PCA0MD=0X00; //0X01; // scale 12 BIT0: ECF
// use SYSCLK as timebase
PCA0H=0X00;
PCA0L=0X00;
//EIEP1.3
EIP1=EIP1|0X08; // PCA0 INT HGIH
PCA0CPM0=0X46;
//。通过置位PCA0CPMn寄存器中ECOMn、TOGn和PWMn位来使能频率输
//出方式。
PCA0CPH0=120;
PCA0CPL0=190;
PCA0CN = 0x40; // BIT7 CF BIT6 CR Clear TF3; start Timer
*/
}
uint CWFTT=0;
uint rr45,rr56;
void Tpca_ISR (void) interrupt 9 using 2 //250uS ONCE
{
PCA0CN &= 0x7F; //CLR BIT7 CF
// PCA0H=0XFE; //65536-461
// PCA0L=0X33;
PCA0H=0XFC; //65536-461
PCA0L=0X66;
/*
CWFTT++;
if( CWFTT>4000) {
CWFTT=0;
if(++rr45>=10) {
rr45=0;
if(++rr56>=20)
rr56=0;
}
}
*/
//Rf_2262();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -