beautypg.com

Texas Instruments MSP50C6xx User Manual

Page 339

background image

C– – Efficiency

5-43

Code Development Tools

Mainasm.asm contains the most complex assembly. It is responsible for
initializing assembly variables, enabling or disabling interrupts, and setting up
any timers or I/O ports. It also enables the interrupts. The part that is important
to the project, _goasm, is called at the beginning of the C– – main routine.

;****************************************************************
; Main program
;
; Set i/o for any peripherals (eg ADC chip, flash card or LCD)
; and initialize variables as necessary. All user code should
; start here.
;****************************************************************
; clear the seconds passed counter

zac a0
mov *seconds_passed,a0

; Set TIMER2 to run from the RTO/CTO (32 kHz) and with a 1000ms period. Set this
by
; loading TIM2 with (32768 x 1000/1000), minus 1.

in

a0,IntGenCtrl

or

a0,TIM2REFOSC

;set bit 9, CTO clock (32 kHz)

and a0,~TIM2ENABLE

;clear bit 11, TIM2 enable

out IntGenCtrl,a0
mov a0,32768 – 1

;setup a 250ms period

out TIM2,a0

;load TIM2 and PRD2 in one step

in

a0,IntGenCtrl

or

a0,TIM2IMR + TIM2ENABLE

;set bit 2 (TIM2 interrupt

;enable) and bit 11

out IntGenCtrl,a0
inte
ret

In this example, it clears seconds_passed, which was used in the first file
(timer2_isr.asm), sets up timer2 to run at a 1Hz interval, and enables the
interrupts.

The fifth important file is cmm1.asm. This file is responsible for supporting C– –
to assembly function calls. It takes parameters passed on the stack, processes
them, and returns a 16-bit value in A0. In C– – the 16-bit return value is always
of type int.

;****************************************************************
; CMM1.ASM
;
; Revision 1.00
;****************************************************************

rorg

0x0

global

_getSecondsPassed

include

”ram\ram.irx”

; retrieve the seconds that have passed, and reset the counter
_getSecondsPassed

rpt2–2 ; interrupt can still fire for 2 cycles
intd

; leaving these out can cause loss of a second

mov a0~, *seconds_passed
zac a0