📄 mcuinit.s
字号:
.module MCUinit.c
.area text
.dbfile MCUinit.c
.dbfunc e MCUinit _MCUinit fV
_MCUinit::
.dbline -1
.dbline 16
; //MCUinit:芯片初始化-------------------------------------------------------*
; //功能:系统初始化设置 *
; // (1)由外部晶振f,通过本程序设置内部总线频率fBUS *
; // (2)确定是否禁止看门狗(COP) *
; //参数:无 *
; //返回:无 *
; //说明:该程序与芯片具体型号有关 *
; // (1)外部晶振f = 32.768kHz,使用内部PLL(锁相环),产生内部总线时钟频率 *
; // fBUS = 2.4576MHz *
; // (2)禁止COP模块 *
; //-------------------------------------------------------------------------*
;
; #include "GP32C.h" //映像寄存器名定义
;
; void MCUinit(void)
; {
.dbline 19
; //1.设置CONFIG2,CONFIG1
; //1.1 设置CONFIG2
; CONFIG2 = 0b00000001;
lda #1
sta 0x1e
.dbline 24
; // ||_SCIBDSRC = 1内部总线时钟用作SCI时钟
; // |__OSCSTOPENB = 0 在stop模式下禁止振荡器工作
;
; //1.2 设置CONFIG1
; CONFIG1 = 0b00111101;
lda #61
sta 0x1f
.dbline 35
; //||||||||_COPD = 1 禁止COP模块
; //|||||||__STOP = 0 禁止STOP指令
; //||||||___SSREC = 1 32个CGMXCLK周期退出STOP模式
; //|||||____LVI5OR3 = 1 LVI工作在5V
; //||||_____LVIPWRD = 1 禁止LVI模块电源
; //|||______LVIRSTD = 1 允许LVI复位信号
; //||_______LVISTOP = 0 在stop模式下禁止LVI
; //|________COPRS = 0 COP溢出范围使用长的时间
;
; //2.PLL编程
; PCTL = 0x00; //(1)禁止PLL:清零PLL控制寄存器PCTL
clr 0x36
.dbline 36
; PCTL = 0x01; //(2)将P,E写入PTCL,置VCO的参考频率为2
lda #1
sta 0x36
.dbline 37
; PMSH = 0x01; //(3)将N写入PMSH,PMSL,置VCO的倍频因子为$12C
lda #1
sta 0x38
.dbline 38
; PMSL = 0x2C;
lda #44
sta 0x39
.dbline 39
; PMRS = 0b10000000; //(4)将L写入PMRS,置VCO的输出频率范围系数为$80
lda #-128
sta 0x3a
.dbline 40
; PRDS = 0x01; //(5)将R写入PRDS
lda #1
sta 0x3b
.dbline 41
; PCTL |= (1 << 5); //(6)置PCTL.PLLON = 1,启动PLL电路
bset #5,0x36
.dbline 42
; PBWC |= (1 << 7); //(7)PBWC自动带宽控制位 = 1,选择自动控制方式
bset #7,0x37
.dbline 43
; PCTL |= (1 << 4); //(8)PCTL.BCS = 1,选择PLL电路为时钟源
bset #4,0x36
.dbline -2
L1:
.dbline 0 ; func end
rts
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -