;* Example CML12SDP256 initialization code...
; PLL, EEDIV and FEDIV register settings are for 4MHz crystal oscillator
; 
;******************************************************************
; Define DP256 registers
REGBS	EQU	$0000		; define register base address for include file

#include DP256REG.ASM

;******************************************************************
; Define clock timing based constants...

EEDIV		equ	$15		; ECLKDIV value, 4Mhz osc clock, 190Khz
FEDIV		equ	$15		; FCLKDIV value, 4Mhz osc clock, 190Khz

* 8Mhz Eclock constants...
BAUD  EQU	$34     ; 9600 baud setting for SCI port
;BAUD	EQU	$1A     ; 19,2K baud setting for SCI port
CLKX	EQU	$01	  ; SYNR setting 8MHz

;* 16Mhz Eclock constants...
;BAUD  EQU	$68     ; 9600 baud setting for SCI port
;BAUD	EQU	$34     ; 19,2K baud setting for SCI port
;CLKX	EQU	$03	  ; SYNR setting 16MHz

;* 24Mhz Eclock constants...
;BAUD	EQU	$9c     ; 9600 baud setting
;BAUD	EQU	$4E     ; 19,2K baud setting
;CLKX	EQU	$05	  ; SYNR setting for 24MHz

; Define Ram use....
;..................................................................
; Define Ram based Interrupt vector table for AutoStart...
; HC12 DP256 table...
	ORG	$3F8A
V_TBL:
VSRV		RMB	2	; RESERVED, VECTOR SERVICE VARIABLE
VPWME		RMB	2	; 8C PWM Emergency shutdown
VPTPI		RMB	2	; 8E Port P input
VC4TX		RMB	2	; 90 CAN4 Transmit
VC4RX		RMB	2	; 92 CAN4 Receive
VC4ERR	RMB	2	; 94 CAN4 Error
VC4WU		RMB	2	; 96 CAN4 wakeup
VC3TX		RMB	2	; 98 CAN3 Transmit
VC3RX		RMB	2	; 9A CAN3 Receive
VC3ERR	RMB	2	; 9C CAN3 Error
VC3WU		RMB	2	; 9E CAN3 wakeup
VC2TX		RMB	2	; A0 CAN2 Transmit
VC2RX		RMB	2	; A2 CAN2 Receive
VC2ERR	RMB	2	; A4 CAN2 Error
VC2WU		RMB	2	; A6 CAN2 wakeup
VC1TX		RMB	2	; A8 CAN1 Transmit
VC1RX		RMB	2	; AA CAN1 Receive
VC1ERR	RMB	2	; AC CAN1 Error
VC1WU		RMB	2	; AE CAN1 wakeup
VC0TX		RMB	2	; B0 CAN0 Transmit
VC0RX		RMB	2	; B2 CAN0 Receive
VC0ERR	RMB	2	; B4 CAN0 Error
VC0WU		RMB	2	; B6 CAN0 wakeup
VFEE		RMB	2	; B8 Flash
VEEP		RMB	2	; BA EEprom
VSPI2		RMB	2	; BC SPI2
VSPI1		RMB	2	; BE SPI1
VI2C		RMB	2	; C0 IIC
VBDLC		RMB	2	; C2 BDLC
VCRGC		RMB	2	; C4 CRG self clock
VCRGL		RMB	2	; C6 CRG Lock
VPABO		RMB	2	; C8 Pulse count B overflow
VMCNT		RMB	2	; CA Modulus counter
VPTHI		RMB	2	; CC Port H input
VPTJI		RMB	2	; CE Port J input
VADC1		RMB	2	; D0 ADC1
VADC0		RMB	2	; D2 ADC0
VSCI1		RMB	2	; D4 SCI1
VSCI0		RMB	2	; D6 SCI0
VSPI0		RMB	2	; D8 SPI0
VPAAI		RMB	2	; DA Pulse count A input
VPAAO		RMB	2	; DC Pulse count A overflow
VTOF		RMB	2	; DE Timer overflow
VTC7		RMB	2	; E0 TC7
VTC6		RMB	2	; E2 TC6
VTC5		RMB	2	; E4 TC5
VTC4		RMB	2	; E6 TC4
VTC3		RMB	2	; E8 TC3
VTC2		RMB	2	; EA TC2
VTC1		RMB	2	; EC TC1
VTC0		RMB	2	; EE TC0
VRTI		RMB	2	; F0 RTI
VIRQ		RMB	2	; F2 IRQ
VXIRQ		RMB	2	; F4 XIRQ
VSWI		RMB	2	; F6 SWI
VTRAP		RMB	2	; F8 TRAP
VCOP		RMB	2	; FA COP
VCLM		RMB	2	; FC Clock
ENDVECT EQU   *
;..................................................................
; Define Stack location, under vector table...

STACK	EQU	$3F8A			; top of ram under Interrupt vectors

;..................................................................
; Define user variables here...



;******************************************************************
; Define Program start location, flash memory...

	ORG	$4000
; Program start-up example .....

RESET:
	sei				; Interrupts off! in case of trap here

;* enable bus controls and set memory map, COMMENT OUT for Single chip mode...
;	movw	#$0CE0,PEAR		; EXPANDED WIDE BUS ON,
;*					; PE4=E, PE3=LSTRB, PE2=R/W

; If single chip, COMMENT OUT
; If expanded, Set flash memory map and if external bus on, enable stretch 
;	movb  #$0F,MISC		; Expanded = Low Flash off, ext. mem stretch = 3 
;	movb	#$01,EBICTL		; Expanded = stretch on

	LDS     #STACK		; initialize the stack pointer
	CLR     COPCTL		; COP TIMER OFF

;* set eeprom clock...
	movb	#EEDIV,ECLKDIV	; set EE clock divider

;* set flash clock for programming...
	movb	#FEDIV,FCLKDIV	; set Flash clock divider

;* enable PLL ...
	movb	#CLKX,SYNR		; set Eclock frequency

;* wait for PLL lock...
PLL_Wait:
	ldaa	CRGFLG		; get PLL flags
	bita	#$08			; test for lock
	beq	PLL_Wait		; wait for lock
	movb	#$80,CLKSEL		; PLL on...

; Initialize Interrupt vectors....
	MOVW	#RESET,VCLM		; set clock fail to Reset vector
					; Set all other not applied interrupt vectors
					; to Reset or Monitor may trap as an
					; unscheduled interrupt and application
					; will not recover without user intervention
	MOVW	#IRQ_SRV,VIRQ	; Example set IRQ vector

; add other initialization as needed by application...



; Start user program...

MAIN:




; Dummy IRQ interrupt service for example...
IRQ_SRV:
	RTI


