2 * Copyright (c) 20010 IAR Systems AB.
\r
4 * Permission to use, copy, modify, and distribute this software for any
\r
5 * purpose with or without fee is hereby granted, provided that the above
\r
6 * copyright notice and this permission notice appear in all copies.
\r
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
\r
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
\r
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
\r
11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
\r
12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
\r
13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
\r
14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
\r
18 * IAR Embedded Workbench tutorial
\r
20 * Test Program for the RSKRX62N Board.
\r
21 * LED's perform different display according to
\r
22 * which switch is pressed.
\r
23 * Used to check that all the LED's, switches,
\r
24 * clock function and AD trigger are working fine.
\r
29 #include "iorx62n.h"
\r
30 #include "intrinsics.h"
\r
32 void ScrollLedsLowHigh(void);
\r
33 void ScrollLedsHighLow(void);
\r
35 unsigned long pause;
\r
36 unsigned long off_set;
\r
40 #define LED0 PORT0.DR.BIT.B2 // P02 LED0
\r
41 #define LED1 PORT0.DR.BIT.B3 // P03 LED1
\r
42 #define LED2 PORT0.DR.BIT.B5 // P05 LED2
\r
43 #define LED3 PORT3.DR.BIT.B4 // P34 LED3
\r
44 #define LED4 PORT6.DR.BIT.B0 // P50 LED4
\r
45 #define LED5 PORT7.DR.BIT.B3 // P73 LED5
\r
47 /* defined words used in this program */
\r
57 __interrupt void isr_sw1(void)
\r
61 CMT.CMSTR0.BIT.STR0 = 0; // stop timer
\r
62 ICU.IR[72].BIT.IR = 0; // clear interrupt request flag
\r
67 __interrupt void isr_sw2(void)
\r
71 CMT.CMSTR0.BIT.STR0 = 0; // stop timer
\r
72 ICU.IR[73].BIT.IR = 0; // clear interrupt request flag
\r
77 __interrupt void isr_sw3(void)
\r
81 CMT.CMSTR0.BIT.STR0 = 1; // start timer
\r
82 ICU.IR[79].BIT.IR = 0; // clear interrupt request flag
\r
86 #pragma vector = 0x1c
\r
87 __interrupt void isr_cmt0(void)
\r
96 ICU.IR[70].BIT.IR = 0; // clear interrupt request flag
\r
103 SYSTEM.MSTPCRA.BIT.MSTPA23 = 0; // A/D Converter (Unit 0) Module
\r
105 // Set up RV1 (potentiometer)
\r
106 AD0.ADCR.BIT.MODE = 2; // Continuous scan mode
\r
107 AD0.ADCSR.BIT.CH = 0; // only AD0
\r
108 AD0.ADCSR.BIT.ADST = 1; // Start A/D
\r
110 // Set up SW1, SW2, SW3
\r
111 PORT0.DDR.BIT.B0 = 0; // SW1 input on P00
\r
112 PORT0.DDR.BIT.B1 = 0; // SW2 input on P01
\r
113 PORT0.DDR.BIT.B7 = 0; // SW3 input on P07
\r
115 PORT0.ICR.BIT.B0 = 1; // Enable input buffer
\r
116 PORT0.ICR.BIT.B1 = 1; // Enable input buffer
\r
117 PORT0.ICR.BIT.B7 = 1; // Enable input buffer
\r
119 // IRQ8-A used for SW1
\r
120 IOPORT.PF8IRQ.BIT.ITS8 = 0; // P00 is designated as the IRQ8-A input pin.
\r
122 IPR(ICU,IRQ8) = 3;
\r
124 // IRQ9-A used for SW2
\r
125 IOPORT.PF8IRQ.BIT.ITS9 = 0; // P01 is designated as IRQ9-A input pin.
\r
127 IPR(ICU,IRQ9) = 3;
\r
129 // IRQ15-A used for SW3
\r
130 IOPORT.PF8IRQ.BIT.ITS15 = 0; // P07 is designated as the IRQ15-A input pin.
\r
131 IEN(ICU,IRQ15) = 1;
\r
132 IPR(ICU,IRQ15) = 3;
\r
135 PORT0.DDR.BIT.B2 = 1; // P02 LED0
\r
136 PORT0.DDR.BIT.B3 = 1; // P03 LED1
\r
137 PORT0.DDR.BIT.B5 = 1; // P05 LED2
\r
138 PORT3.DDR.BIT.B4 = 1; // P34 LED3
\r
139 PORT6.DDR.BIT.B0 = 1; // P50 LED4
\r
140 PORT7.DDR.BIT.B3 = 1; // P73 LED5
\r
142 // Turn al LED's off
\r
143 LED0 = LED1 = LED2 = LED3 = LED4 = LED5 = OFF;
\r
146 SYSTEM.MSTPCRA.BIT.MSTPA15 = 0; // CMT timers 0,
\r
147 CMT0.CMCR.BIT.CKS = 3; // 25MHz/512 = 48.8kHz
\r
148 CMT0.CMCR.BIT.CMIE = 1; // enable peripheral interrupt source
\r
149 CMT0.CMCOR = 12212; // 4 Hz operation
\r
150 ICU.IER[3].BIT.IEN4 = 1; // enable timer 0 interrupt
\r
151 IPR(CMT0,CMI0) = 1; // LED level 1
\r
153 __enable_interrupt();
\r
162 ScrollLedsLowHigh();
\r
165 ScrollLedsHighLow();
\r
174 /* scrolls the LED's from low to high */
\r
175 void ScrollLedsLowHigh()
\r
177 char led_number = 0;
\r
179 while (GetKey == SW1)
\r
181 if (led_number > 5)
\r
188 LED1=LED2=LED3=LED4=LED5=OFF;
\r
192 LED0=LED2=LED3=LED4=LED5=OFF;
\r
196 LED0=LED1=LED3=LED4=LED5=OFF;
\r
200 LED0=LED1=LED2=LED4=LED5=OFF;
\r
204 LED0=LED1=LED2=LED3=LED5=OFF;
\r
208 LED0=LED1=LED2=LED3=LED4=OFF;
\r
213 off_set = AD0.ADDRA*1000;
\r
214 for (pause = off_set; pause != 0; pause --);
\r
218 /* scrolls the LED's from high to low */
\r
219 void ScrollLedsHighLow()
\r
221 signed char led_number = 3;
\r
223 while (GetKey == SW2)
\r
225 if (led_number < 0)
\r
232 LED1=LED2=LED3=LED4=LED5=OFF;
\r
236 LED0=LED2=LED3=LED4=LED5=OFF;
\r
240 LED0=LED1=LED3=LED4=LED5=OFF;
\r
244 LED0=LED1=LED2=LED4=LED5=OFF;
\r
248 LED0=LED1=LED2=LED3=LED5=OFF;
\r
252 LED0=LED1=LED2=LED3=LED4=OFF;
\r
257 off_set = AD0.ADDRA*1000;
\r
258 for (pause = off_set; pause != 0; pause --);
\r