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();
}