mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-09-01 20:03:50 -04:00
Add FreeRTOS-Plus directory.
This commit is contained in:
parent
7bd5f21ad5
commit
f508a5f653
6798 changed files with 134949 additions and 19 deletions
260
FreeRTOS/Demo/RX600_RX62N-RSK_IAR/RSKRX62N_Demo.c
Normal file
260
FreeRTOS/Demo/RX600_RX62N-RSK_IAR/RSKRX62N_Demo.c
Normal file
|
@ -0,0 +1,260 @@
|
|||
/*
|
||||
* Copyright (c) 20010 IAR Systems AB.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* IAR Embedded Workbench tutorial
|
||||
*
|
||||
* Test Program for the RSKRX62N Board.
|
||||
* LED's perform different display according to
|
||||
* which switch is pressed.
|
||||
* Used to check that all the LED's, switches,
|
||||
* clock function and AD trigger are working fine.
|
||||
*
|
||||
* $Revision: 1556 $
|
||||
*/
|
||||
|
||||
#include "iorx62n.h"
|
||||
#include "intrinsics.h"
|
||||
|
||||
void ScrollLedsLowHigh(void);
|
||||
void ScrollLedsHighLow(void);
|
||||
|
||||
unsigned long pause;
|
||||
unsigned long off_set;
|
||||
|
||||
#define ON 0
|
||||
#define OFF 1
|
||||
#define LED0 PORT0.DR.BIT.B2 // P02 LED0
|
||||
#define LED1 PORT0.DR.BIT.B3 // P03 LED1
|
||||
#define LED2 PORT0.DR.BIT.B5 // P05 LED2
|
||||
#define LED3 PORT3.DR.BIT.B4 // P34 LED3
|
||||
#define LED4 PORT6.DR.BIT.B0 // P50 LED4
|
||||
#define LED5 PORT7.DR.BIT.B3 // P73 LED5
|
||||
|
||||
/* defined words used in this program */
|
||||
enum {
|
||||
SW1,
|
||||
SW2,
|
||||
SW3,
|
||||
NONE
|
||||
}GetKey;
|
||||
|
||||
/* SW1 ISR */
|
||||
#pragma vector = 72
|
||||
__interrupt void isr_sw1(void)
|
||||
{
|
||||
GetKey=SW1;
|
||||
|
||||
CMT.CMSTR0.BIT.STR0 = 0; // stop timer
|
||||
ICU.IR[72].BIT.IR = 0; // clear interrupt request flag
|
||||
}
|
||||
|
||||
/* SW2 ISR */
|
||||
#pragma vector = 73
|
||||
__interrupt void isr_sw2(void)
|
||||
{
|
||||
GetKey=SW2;
|
||||
|
||||
CMT.CMSTR0.BIT.STR0 = 0; // stop timer
|
||||
ICU.IR[73].BIT.IR = 0; // clear interrupt request flag
|
||||
}
|
||||
|
||||
/* SW3 ISR */
|
||||
#pragma vector = 79
|
||||
__interrupt void isr_sw3(void)
|
||||
{
|
||||
GetKey=SW3;
|
||||
|
||||
CMT.CMSTR0.BIT.STR0 = 1; // start timer
|
||||
ICU.IR[79].BIT.IR = 0; // clear interrupt request flag
|
||||
}
|
||||
|
||||
/* Timer ISR */
|
||||
#pragma vector = 0x1c
|
||||
__interrupt void isr_cmt0(void)
|
||||
{
|
||||
// Toggle LED's
|
||||
LED0 = ~LED0;
|
||||
LED1 = ~LED1;
|
||||
LED2 = ~LED2;
|
||||
LED3 = ~LED3;
|
||||
LED4 = ~LED4;
|
||||
LED5 = ~LED5;
|
||||
ICU.IR[70].BIT.IR = 0; // clear interrupt request flag
|
||||
}
|
||||
|
||||
/* Main program. */
|
||||
void main (void)
|
||||
{
|
||||
// enable modules
|
||||
SYSTEM.MSTPCRA.BIT.MSTPA23 = 0; // A/D Converter (Unit 0) Module
|
||||
|
||||
// Set up RV1 (potentiometer)
|
||||
AD0.ADCR.BIT.MODE = 2; // Continuous scan mode
|
||||
AD0.ADCSR.BIT.CH = 0; // only AD0
|
||||
AD0.ADCSR.BIT.ADST = 1; // Start A/D
|
||||
|
||||
// Set up SW1, SW2, SW3
|
||||
PORT0.DDR.BIT.B0 = 0; // SW1 input on P00
|
||||
PORT0.DDR.BIT.B1 = 0; // SW2 input on P01
|
||||
PORT0.DDR.BIT.B7 = 0; // SW3 input on P07
|
||||
|
||||
PORT0.ICR.BIT.B0 = 1; // Enable input buffer
|
||||
PORT0.ICR.BIT.B1 = 1; // Enable input buffer
|
||||
PORT0.ICR.BIT.B7 = 1; // Enable input buffer
|
||||
|
||||
// IRQ8-A used for SW1
|
||||
IOPORT.PF8IRQ.BIT.ITS8 = 0; // P00 is designated as the IRQ8-A input pin.
|
||||
IEN(ICU,IRQ8) = 1;
|
||||
IPR(ICU,IRQ8) = 3;
|
||||
|
||||
// IRQ9-A used for SW2
|
||||
IOPORT.PF8IRQ.BIT.ITS9 = 0; // P01 is designated as IRQ9-A input pin.
|
||||
IEN(ICU,IRQ9) = 1;
|
||||
IPR(ICU,IRQ9) = 3;
|
||||
|
||||
// IRQ15-A used for SW3
|
||||
IOPORT.PF8IRQ.BIT.ITS15 = 0; // P07 is designated as the IRQ15-A input pin.
|
||||
IEN(ICU,IRQ15) = 1;
|
||||
IPR(ICU,IRQ15) = 3;
|
||||
|
||||
// Set up LED's
|
||||
PORT0.DDR.BIT.B2 = 1; // P02 LED0
|
||||
PORT0.DDR.BIT.B3 = 1; // P03 LED1
|
||||
PORT0.DDR.BIT.B5 = 1; // P05 LED2
|
||||
PORT3.DDR.BIT.B4 = 1; // P34 LED3
|
||||
PORT6.DDR.BIT.B0 = 1; // P50 LED4
|
||||
PORT7.DDR.BIT.B3 = 1; // P73 LED5
|
||||
|
||||
// Turn al LED's off
|
||||
LED0 = LED1 = LED2 = LED3 = LED4 = LED5 = OFF;
|
||||
|
||||
// Set up Timer
|
||||
SYSTEM.MSTPCRA.BIT.MSTPA15 = 0; // CMT timers 0,
|
||||
CMT0.CMCR.BIT.CKS = 3; // 25MHz/512 = 48.8kHz
|
||||
CMT0.CMCR.BIT.CMIE = 1; // enable peripheral interrupt source
|
||||
CMT0.CMCOR = 12212; // 4 Hz operation
|
||||
ICU.IER[3].BIT.IEN4 = 1; // enable timer 0 interrupt
|
||||
IPR(CMT0,CMI0) = 1; // LED level 1
|
||||
|
||||
__enable_interrupt();
|
||||
|
||||
GetKey=SW1;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
switch (GetKey)
|
||||
{
|
||||
case SW1:
|
||||
ScrollLedsLowHigh();
|
||||
break;
|
||||
case SW2:
|
||||
ScrollLedsHighLow();
|
||||
break;
|
||||
case SW3:
|
||||
GetKey=NONE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* scrolls the LED's from low to high */
|
||||
void ScrollLedsLowHigh()
|
||||
{
|
||||
char led_number = 0;
|
||||
|
||||
while (GetKey == SW1)
|
||||
{
|
||||
if (led_number > 5)
|
||||
led_number = 0;
|
||||
|
||||
switch(led_number)
|
||||
{
|
||||
case 0:
|
||||
LED0=ON;
|
||||
LED1=LED2=LED3=LED4=LED5=OFF;
|
||||
break;
|
||||
case 1:
|
||||
LED1=ON;
|
||||
LED0=LED2=LED3=LED4=LED5=OFF;
|
||||
break;
|
||||
case 2:
|
||||
LED2=ON;
|
||||
LED0=LED1=LED3=LED4=LED5=OFF;
|
||||
break;
|
||||
case 3:
|
||||
LED3=ON;
|
||||
LED0=LED1=LED2=LED4=LED5=OFF;
|
||||
break;
|
||||
case 4:
|
||||
LED4=ON;
|
||||
LED0=LED1=LED2=LED3=LED5=OFF;
|
||||
break;
|
||||
case 5:
|
||||
LED5=ON;
|
||||
LED0=LED1=LED2=LED3=LED4=OFF;
|
||||
break;
|
||||
}
|
||||
led_number++;
|
||||
|
||||
off_set = AD0.ADDRA*1000;
|
||||
for (pause = off_set; pause != 0; pause --);
|
||||
}
|
||||
}
|
||||
|
||||
/* scrolls the LED's from high to low */
|
||||
void ScrollLedsHighLow()
|
||||
{
|
||||
signed char led_number = 3;
|
||||
|
||||
while (GetKey == SW2)
|
||||
{
|
||||
if (led_number < 0)
|
||||
led_number = 5;
|
||||
|
||||
switch(led_number)
|
||||
{
|
||||
case 0:
|
||||
LED0=ON;
|
||||
LED1=LED2=LED3=LED4=LED5=OFF;
|
||||
break;
|
||||
case 1:
|
||||
LED1=ON;
|
||||
LED0=LED2=LED3=LED4=LED5=OFF;
|
||||
break;
|
||||
case 2:
|
||||
LED2=ON;
|
||||
LED0=LED1=LED3=LED4=LED5=OFF;
|
||||
break;
|
||||
case 3:
|
||||
LED3=ON;
|
||||
LED0=LED1=LED2=LED4=LED5=OFF;
|
||||
break;
|
||||
case 4:
|
||||
LED4=ON;
|
||||
LED0=LED1=LED2=LED3=LED5=OFF;
|
||||
break;
|
||||
case 5:
|
||||
LED5=ON;
|
||||
LED0=LED1=LED2=LED3=LED4=OFF;
|
||||
break;
|
||||
}
|
||||
led_number--;
|
||||
|
||||
off_set = AD0.ADDRA*1000;
|
||||
for (pause = off_set; pause != 0; pause --);
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue