📄 systeminital.asm
字号:
//==================================================================================//
// 文件名: SystemInital.asm
// 描 述: 用于初始化IO,以及D12芯片,系统时钟、中断等。
// 日 期: 2003/04/03
// 库文件: NONE
//==================================================================================//
.include hardware.inc;
.PUBLIC _SP_GetCh;
.public _System_Initial0;
.public F_System_Initial0;
.public F_Interrupt_On;
.public _Interrupt_On;
.public _Interrupt_On_True
.public _Delay1;
.public F_Delay1;
.public _Interrupt_Off;
.public F_Interrupt_Off;
.public _Interrupt_Off_True
.public _SP_InitWriteSRAM
.public F_SP_InitWriteSRAM
.public F_SP_InitReadSRAM
.public _SP_InitReadSRAM
.PUBLIC F_SP_WriteSRAM
.PUBLIC F_SP_ReadSRAM
.define FoscCLK_20 0x00; //Fosc=20.480MHz
.define FoscCLK_24 0x20; //Fosc=24.576MHz
.define FoscCLK_32 0x40; //Fosc=32.768MHz
.define FoscCLK_40 0x60; //Fosc=40.960MHz
.define FoscCLK_49 0x80; //Fosc=49.152MHz
.define CPUCLK_Fosc 0x00; //CPUClk选Fosc
.define CPUCLK_Fosc2 0x01; //CPUClk选Fosc/2
.define CPUCLK_Fosc4 0x02; //CPUClk选Fosc/4
.define CPUCLK_Fosc8 0x03; //CPUClk选Fosc/8
.define CPUCLK_Fosc16 0x04; //CPUClk选Fosc/16
.define CPUCLK_Fosc32 0x05; //CPUClk选Fosc/32
.define CPUCLK_Fosc64 0x06; //CPUClk选Fosc/64
.define Fosc_CLK_RATE FoscCLK_49; //选择不同Fosc信号频率
.define CPU_CLK_RATE CPUCLK_Fosc; //改变CPUClk频率
.code
//=====================================================================
// 函数: System_Initial0
// 语法: void System_Initial0(void) (for c language)
// 描述: 用于初始化IO,以及D12芯片,系统时钟、中断
// 参数: 无
// 返回: 无
//=====================================================================
_System_Initial0: .PROC
F_System_Initial0:
push r1,r1 to [sp];
int off;
r1=0x0100; //开中断IRQ3_EXT1
[R_InterruptStatus]=R1;
[P_INT_Ctrl_New]=r1;
R1=Fosc_CLK_RATE; //Fosc
R1|=CPU_CLK_RATE; //CPUClk
[P_SystemClock]=R1;
r1=0x00f0; //设置IOA8-IOA15为带上拉电阻地输入
[P_IOA_Dir]=r1;
[P_IOA_Attrib]=r1;
r1=0xfff0;
[P_IOA_Data]=r1;
//************************************************//
//***IOB0,IOB1为同相高电平输出********************//
//***IOB2=INT_N=1为带上拉电阻的输入**************//
//***IOB3=RESET_N=1为同相高电平输出***************//
//***IOB4=RD_N=1,IOB5=WR_N=1为同相高电平输出****//
//***IOB6=ALE=0为同相低电平输出******************//
//***IOB7为带下拉电阻输入*************************//
//***IOB8=CS_N=0同相低电平输出*******************//
//************************************************//
r1=0x017b; //CS_N=IOB8=0,ALE=IOB6=0,WR_N=IOB5=1,RD_N=IOB4=1;
[P_IOB_Dir]=r1; //IOB3=RESET_N=1,IOB2=INT_N=1,IOB0、IOB1输出
[P_IOB_Attrib]=r1; //为选中D12
r1=0x003F ;
[P_IOB_Data]=r1;
r1=0x0037;
[P_IOB_Data]=r1; //CS_N=0,ALE=0,WR_N=1,RD_N=1,RESET_N=0,INT_N=1
call F_Delay1; //系统复位延时。
r1=0x003f;
[P_IOB_Data]=r1; //CS_N=0,ALE=0,WR_N=1,RD_N=1,RESET_N=1,INT_N=1
pop r1,r1 from [sp];
retf;
.endp;
//=====================================================================
// 函数: Interrupt_On
// 语法: void Interrupt_On(void) (for c language)
// 描述: 开IRQ中断
// 参数: 无
// 返回: 无
//=====================================================================
_Interrupt_On: .PROC
F_Interrupt_On:
IRQ ON
retf;
.endp;
//=====================================================================
// 函数: Interrupt_Off
// 语法: void Interrupt_Off(void) (for c language)
// 描述: 关IRQ中断
// 参数: 无
// 返回: 无
//=====================================================================
_Interrupt_Off: .PROC
F_Interrupt_Off:
IRQ OFF
retf;
.endp;
_Interrupt_On_True: .PROC
F_Interrupt_On_True:
INT FIQ,IRQ
retf;
.endp;
_Interrupt_Off_True: .PROC
F_Interrupt_Off_True:
INT OFF
retf;
.endp;
//=====================================================================
// 函数: Delay1
// 语法: void Delay1(void) (for c language)
// 描述: 延时
// 参数: 无
// 返回: 无
//=====================================================================
_Delay1: .proc
F_Delay1:
push r1,r2 to [sp];
r2=0x000f;
Loop1:
r1=0xffff;
Loop2:
r1-=1;
jnz Loop2;
r2-=1;
jnz Loop1;
nop;
pop r1,r2 from [sp];
retf;
.endp
//----------------------------
// FOR SRAM
//----------------------------
_SP_InitWriteSRAM: .proc
F_SP_InitWriteSRAM:
push r1 to [sp]
pop r1 from [sp]
retf
.endp
_SP_InitReadSRAM: .PROC
F_SP_InitReadSRAM:
push r1 to [sp]
pop r1 from [sp]
retf
.ENDP
F_SP_WriteSRAM: .proc
push r1,r3 to [sp]
pop r1,r3 from [sp]
retf
.endp
F_SP_ReadSRAM: .proc
push r2,r4 to [sp]
pop r2,r4 from [sp] // don't pop r1(return value)
retf
.endp
_SP_GetCh:
r1 = [P_IOA_Data];
r1&=0x0007;
retf;
.public _SP_ClrWatchDog;
_SP_ClrWatchDog:
push r1 to [sp];
r1=0x0001;
[P_Watchdog_Clear]=r1;
pop r1 from [sp];
retf;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -