OK 6410アセンブラ練習
6410のアセンブリを使ってみると、当時の51と差が少なく、一歩一歩勉強していることがわかります.
;*************************************************************************************************************
;* : ok6410.s
;* : S3C6410
;* : [email protected]
;* : 2013 1 4 21:27
;* :2013 1 4
;* :
;*************************************************************************************************************/
TINT_CSTAT EQU 0x7F006044 ;
VIC0ADDRESS EQU 0x71200F00 ; 0,
VIC1ADDRESS EQU 0x71300F00 ; 1,
;
IMPORT LED1_flash ;LED1
;
EXPORT Time_Isr ;
PRESERVE8;
AREA S3C6410_CPU, CODE, READONLY
; 1 , : 6410 IRQ , IRQ , , CPSR
Time_Isr
STMFD SP!, {R0,R1,LR} ;R0,R1,LR
LDR R0, =TINT_CSTAT
LDR R1, [R0] ; TINT_CSTAT
ORR R1, R1, #0x01<<6 ; BIT6, 1
STR R1, [R0] ;
BL LED1_flash ; LED
LDR R0, =VIC0ADDRESS ; VIC
LDR R1, =0xffffffff
STR R1, [R0]
LDR R0, =VIC1ADDRESS
STR R1, [R0]
LDMFD SP!, {R0,R1,LR} ;R0,R1,LR
; SUB, SPSR , , -S , CPSR , SPSR_IRQ CRSP
SUBS PC, LR, #4 ; ,LR 4 PC, -4,
END
/*************************************************************************************************************
;* : ok6410.h
;* : S3C6410
;* : [email protected]
;* : 2013 1 4 21:27
;* :2013 1 4
;* :
;*************************************************************************************************************/
#ifndef S3C6410_H_
#define S3C6410_H_
void Time_Isr(void); // 1
#endif /*S3C6410_H_*/
#include "system.h"
#include "uart.h"
#include "tft_lcd.h"
#include "other.h"
#include "delay.h"
#include "timer.h"
#include "s3c6410.h"
void LED1_flash(void);
/*************************************************************************************************************************
* : void Timer_Init(u32 RTime,FunctionalState EnInt,void (*TimerIsr)(void))
* : 1
* :
* :
* :
* : [email protected]
* : 20120520
* : 20120520
* : 0 1
*************************************************************************************************************************/
void Timer_Init(u32 RTime,FunctionalState EnInt,void (*TimerIsr)(void))
{
rTCFG0 |= 65; // 0 65+1, PCLK=66 ,66 1MHz ,
rTCON &= (~0xff00); //
rTCON |= BIT11; // 1
rTCNTB1 = RTime; //
rTINT_CSTAT |= BIT6; //
rTINT_CSTAT |= (EnInt == ENABLE) ? BIT1 : 0; // 0
Set_IsrAddr(INT_TIMER1,(u32)TimerIsr); //
Set_IntEnable(INT_TIMER1,EnInt); // 1
// 0
rTCON |= BIT9; //
rTCON &= ~BIT9; //
rTCON |= BIT8; // 0
}
//
int main(void)
{
// u16 data;
UART0_Init(DISABLE,115200); // , , 115200
LCD_Init(); // LCD
LED_Init(); // LED
Timer_Init(400000-1,ENABLE,Time_Isr); // 1, 400ms
while(1);
}
//LED1 , 1 , 400MS
void LED1_flash(void)
{
LED1_FLASH();
}