Commit 3 RX100 low power demos.

This commit is contained in:
Richard Barry 2013-04-17 10:04:38 +00:00
parent 2b41be4cb9
commit 2bd7d0c1f5
112 changed files with 37911 additions and 0 deletions

View file

@ -0,0 +1,252 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : lcd.c
* Device(s) : RX
* H/W Platform : RSKRX111
* Description : Provides variable and function declarations for lcd.c file
***********************************************************************************************************************/
/***********************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 08.11.2012 0.01 Beta Release
***********************************************************************************************************************/
/***********************************************************************************************************************
Includes <System Includes> , "Project Includes"
***********************************************************************************************************************/
/* Standard string manipulation & formatting functions */
#include <stdio.h>
#include <string.h>
/* Defines standard variable types used in this function */
#include <stdint.h>
/* Bring in board includes. */
#include "platform.h"
/* Following header file provides function prototypes for LCD controlling functions & macro defines */
#include "lcd.h"
/***********************************************************************************************************************
Private global variables and functions
***********************************************************************************************************************/
static void lcd_delay(volatile int32_t nsecs);
static void lcd_nibble_write(uint8_t data_or_ctrl, uint8_t value);
static void lcd_write(uint8_t data_or_ctrl, uint8_t value);
/***********************************************************************************************************************
* Function name : lcd_initialize
* Description : Initializes the LCD display.
* Arguments : none
* Return Value : none
***********************************************************************************************************************/
void lcd_initialize(void)
{
/* Set LCD data pins as outputs. */
PORT4.PDR.BYTE |= 0x0F;
/* Set LCD control pins as outputs. */
RS_PIN_DDR = 1;
E_PIN_DDR = 1;
/* Power Up Delay for the LCD Module */
lcd_delay(50000000);
/* Display initialises in 8 bit mode - so send one write (seen as 8 bit) to set to 4 bit mode. */
lcd_nibble_write(CTRL_WR, 0x03);
lcd_delay(5000000);
lcd_nibble_write(CTRL_WR, 0x03);
lcd_delay(5000000);
lcd_nibble_write(CTRL_WR, 0x03);
lcd_delay(5000000);
/* Function Set */
lcd_nibble_write(CTRL_WR, 0x02);
lcd_delay(39000);
lcd_nibble_write(CTRL_WR, 0x02);
lcd_nibble_write(CTRL_WR, (LCD_DISPLAY_ON | LCD_TWO_LINE ));
lcd_delay(39000);
/* Display ON/OFF control */
lcd_write(CTRL_WR, LCD_CURSOR_OFF);
lcd_delay(39000);
/* Display Clear */
lcd_write(CTRL_WR, LCD_CLEAR);
lcd_delay(2000000);
/* Entry Mode Set */
lcd_write(CTRL_WR, 0x06);
lcd_delay(39000);
/* Home the cursor */
lcd_write(CTRL_WR, LCD_HOME_L1);
lcd_delay(5000000);
}
/***********************************************************************************************************************
* Function name : lcd_clear
* Description : Clears the LCD
* Arguments : none
* Return Value : none
***********************************************************************************************************************/
void lcd_clear(void)
{
/* Display Clear */
lcd_write(CTRL_WR, LCD_CLEAR);
lcd_delay(2000000);
}
/***********************************************************************************************************************
* Function name : lcd_display
* Description : This function controls LCD writes to line 1 or 2 of the LCD.
* You need to use the defines LCD_LINE1 and LCD_LINE2 in order to specify the starting position.
* For example, to start at the 2nd position on line 1...
* lcd_display(LCD_LINE1 + 1, "Hello")
* Arguments : position -
* Line number of display
* string -
* Pointer to null terminated string
* Return Value : none
***********************************************************************************************************************/
void lcd_display(uint8_t position, uint8_t const * string)
{
/* Declare next position variable */
static uint8_t next_pos = 0xFF;
/* Set line position if needed. We don't want to if we don't need to because LCD control operations take longer
than LCD data operations. */
if (next_pos != position)
{
if(position < LCD_LINE2)
{
/* Display on Line 1 */
lcd_write(CTRL_WR, ((uint8_t)(LCD_HOME_L1 + position)));
}
else
{
/* Display on Line 2 */
lcd_write(CTRL_WR, ((uint8_t)((LCD_HOME_L2 + position) - LCD_LINE2)));
}
lcd_delay(39000);
/* set position index to known value */
next_pos = position;
}
do
{
/* Write character to LCD. */
lcd_write(DATA_WR,*string++);
lcd_delay(43000);
/* Increment position index */
next_pos++;
}
while(*string);
}
/***********************************************************************************************************************
* Function name : lcd_delay
* Description : Implements LCD required delays.
* Arguments : nsecs -
* Number of nanoseconds to delay. RX111 has max clock of 32MHz which gives a cycle time of 31.3ns.
* This means that nothing under 313ns should be input. 313ns would be 10 cycles which is still
* being optimistic for getting in and out of this function.
* Return Value : none
***********************************************************************************************************************/
static void lcd_delay(volatile int32_t nsecs)
{
while (0 < nsecs)
{
/* Subtract off 10 cycles per iteration. This number was obtained when using the Renesas toolchain at
optimization level 2. The number to nanoseconds to subtract off below is calculated off of the ICLK speed. */
nsecs -= (int32_t)((313.0)*(32000000.0/(float)ICLK_HZ));
}
}
/***********************************************************************************************************************
* Function name : lcd_nibble_write
* Description : Writes data to display. Sends command to display.
* Arguments : value -
* The value to write
* data_or_ctrl -
* Whether to write data or control.
* 1 = DATA
* 0 = CONTROL
* Return Value : none
***********************************************************************************************************************/
static void lcd_nibble_write(uint8_t data_or_ctrl, uint8_t value)
{
/* Set Register Select pin high for Data */
if (data_or_ctrl == DATA_WR)
{
/* Data write. */
RS_PIN = 1;
}
else
{
/* Control write. */
RS_PIN = 0;
}
/* tsu1 delay */
lcd_delay(60);
/* EN enable chip (HIGH) */
E_PIN = 1;
/* Output the data */
PORT4.PODR.BYTE = (value & 0x0F);
/* tw delay */
lcd_delay(450);
/* Latch data by dropping E */
E_PIN = 0;
/* th2 delay */
lcd_delay(10);
/* tc delay */
lcd_delay(480);
}
/***********************************************************************************************************************
* Function name : lcd_write
* Description : This function controls LCD writes to line 1 or 2 of the LCD. You need to use the defines LCD_LINE1 and
* LCD_LINE2 in order to specify the starting position.
* For example, to start at the 2nd position on line 1...
* lcd_display(LCD_LINE1 + 1, "Hello")
* Arguments : value -
* The value to write
* data_or_ctrl -
* Whether to write data or control.
* 1 = DATA
* 0 = CONTROL
* Return Value : none
***********************************************************************************************************************/
static void lcd_write(uint8_t data_or_ctrl, uint8_t value)
{
/* Write upper nibble first */
lcd_nibble_write(data_or_ctrl, (uint8_t)((value & 0xF0) >> 4));
/* Write lower nibble second */
lcd_nibble_write(data_or_ctrl, (uint8_t)(value & 0x0F));
}

View file

@ -0,0 +1,101 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : lcd.h
* Device(s) : RX
* H/W Platform : RSKRX111
* Description : Provides variable and function declarations for lcd.c file
***********************************************************************************************************************/
/***********************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 08.11.2012 0.01 Beta Release
***********************************************************************************************************************/
/* Multiple inclusion prevention macro */
#ifndef LCD_H
#define LCD_H
/***********************************************************************************************************************
Includes <System Includes> , "Project Includes"
***********************************************************************************************************************/
/* Defines standard integer variable types used in this file */
#include <stdint.h>
/***********************************************************************************************************************
Macro definitions
***********************************************************************************************************************/
/* RS register select pin */
#define RS_PIN PORTC.PODR.BIT.B5
#define RS_PIN_DDR PORTC.PDR.BIT.B5
/* Display enable pin */
#define E_PIN PORTB.PODR.BIT.B1
#define E_PIN_DDR PORTB.PDR.BIT.B1
/* Data write/read definition */
#define DATA_WR 1
/* Control write/read definition */
#define CTRL_WR 0
/* Maximum characters per line of LCD display. */
#define NUMB_CHARS_PER_LINE 8
/* Number of lines on the LCD display */
#define MAXIMUM_LINES 2
/* Character position of LCD line 1 */
#define LCD_LINE1 0
/* Character position of LCD line 2 */
#define LCD_LINE2 16
/* Clear LCD display and home cursor */
#define LCD_CLEAR 0x01
/* Move cursor to line 1 */
#define LCD_HOME_L1 0x80
/* Move cursor to line 2 */
#define LCD_HOME_L2 0xC0
/* Cursor auto decrement after R/W */
#define CURSOR_MODE_DEC 0x04
/* Cursor auto increment after R/W */
#define CURSOR_MODE_INC 0x06
/* Setup, 4 bits,2 lines, 5X7 */
#define FUNCTION_SET 0x28
/* Display ON with Cursor */
#define LCD_CURSOR_ON 0x0E
/* Display ON with Cursor off */
#define LCD_CURSOR_OFF 0x0C
/* Display on with blinking cursor */
#define LCD_CURSOR_BLINK 0x0D
/* Move Cursor Left One Position */
#define LCD_CURSOR_LEFT 0x10
/* Move Cursor Right One Position */
#define LCD_CURSOR_RIGHT 0x14
/* Enable LCD display */
#define LCD_DISPLAY_ON 0x04
/* Enable both LCD lines */
#define LCD_TWO_LINE 0x08
/***********************************************************************************************************************
Exported global functions (to be accessed by other files)
***********************************************************************************************************************/
/* LCD initialisation function declaration */
void lcd_initialize (void);
/* Update display function declaration */
void lcd_display(uint8_t position, uint8_t const * string);
/* Clear LCD function delcaration */
void lcd_clear (void);
/* End of multiple inclusion prevention macro */
#endif

View file

@ -0,0 +1,50 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : r_bsp.h
* H/W Platform : RSKRX111
* Description : Has the header files that should be included for this platform.
***********************************************************************************************************************/
/***********************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 08.11.2012 0.01 Beta Release
***********************************************************************************************************************/
#ifndef PLATFORM_BOARD_RSKRX111
#define PLATFORM_BOARD_RSKRX111
/* Make sure that no other platforms have already been defined. Do not touch this! */
#ifdef PLATFORM_DEFINED
#error "Error - Multiple platforms defined in platform.h!"
#else
#define PLATFORM_DEFINED
#endif
/***********************************************************************************************************************
INCLUDE APPROPRIATE MCU AND BOARD FILES
***********************************************************************************************************************/
#include "r_bsp_config.h"
#include "iorx111.h"
#include ".\mcu\rx111\mcu_info.h"
#include ".\board\rskrx111\rskrx111.h"
#include ".\board\rskrx111\lcd.h"
#endif /* PLATFORM_BOARD_RSKRX111 */

View file

@ -0,0 +1,250 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : r_bsp_config_reference.c
* Device(s) : RX111
* Description : The file r_bsp_config.h is used to configure your BSP. r_bsp_config.h should be included
* somewhere in your package so that the r_bsp code has access to it. This file (r_bsp_config_reference.h)
* is just a reference file that the user can use to make their own r_bsp_config.h file.
************************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 07.11.2012 0.01 Beta Release
***********************************************************************************************************************/
#ifndef R_BSP_CONFIG_REF_HEADER_FILE
#define R_BSP_CONFIG_REF_HEADER_FILE
/***********************************************************************************************************************
Configuration Options
***********************************************************************************************************************/
/* Enter the product part number for your MCU. This information will be used to obtain information about your MCU such
as package and memory size.
To help parse this information, the part number will be defined using multiple macros.
R 5 F 51 11 5 A D FM
| | | | | | | | | Macro Name Description
| | | | | | | | |__MCU_PART_PACKAGE = Package type, number of pins, and pin pitch
| | | | | | | |____not used = Products with wide temperature range (D: -40 to 85C G: -40 to 105C)
| | | | | | |______not used = Blank
| | | | | |________MCU_PART_MEMORY_SIZE = ROM, RAM, and Data Flash Capacity
| | | | |___________MCU_PART_GROUP = Group name
| | | |______________MCU_PART_SERIES = Series name
| | |________________MCU_PART_MEMORY_TYPE = Type of memory (Flash)
| |__________________not used = Renesas MCU
|____________________not used = Renesas semiconductor product.
*/
/* Package type. Set the macro definition based on values below:
Character(s) = Value for macro = Package Type/Number of Pins/Pin Pitch
FM = 0x0 = LFQFP/64/0.50
FK = 0x1 = LQFP/64/0.80
LF = 0x2 = TFLGA/64/0.50
FL = 0x3 = LFQFP/48/0.50
NE = 0x4 = VQFN/48/0.50
NC = 0x5 = HWQFN/36/0.50
LM = 0x6 = WFLGA/36/0.50
SB = 0x7 = SSOP/36/0.80
*/
#define MCU_PART_PACKAGE (0x0)
/* ROM, RAM, and Data Flash Capacity.
Character(s) = Value for macro = ROM Size/Ram Size/Data Flash Size
5 = 0x5 = 128KB/16KB/8KB
4 = 0x4 = 96KB/16KB/8KB
3 = 0x3 = 64KB/10KB/8KB
1 = 0x1 = 32KB/10KB/8KB
J = 0x0 = 16KB/8KB/8KB
*/
#define MCU_PART_MEMORY_SIZE (0x5)
/* Group name.
Character(s) = Value for macro = Description
10 = 0x0 = RX110 Group
11 = 0x1 = RX111 Group
*/
#define MCU_PART_GROUP (0x1)
/* Series name.
Character(s) = Value for macro = Description
51 = 0x0 = RX100 Series
*/
#define MCU_PART_SERIES (0x0)
/* Memory type.
Character(s) = Value for macro = Description
F = 0x0 = Flash memory version
*/
#define MCU_PART_MEMORY_TYPE (0x0)
/* The 'BSP_DECLARE_STACK' macro is checked so that the stack is only declared in one place (resetprg.c). Every time a
'#pragma stacksize' is encountered, the stack size is increased. This prevents multiplication of stack size. */
#if defined(BSP_DECLARE_STACK)
/* User Stack size in bytes. The Renesas RX toolchain sets the stack size using the #pragma stacksize directive. */
#pragma stacksize su=0x400
/* Interrupt Stack size in bytes. The Renesas RX toolchain sets the stack size using the #pragma stacksize directive. */
#pragma stacksize si=0x100
#endif
/* Heap size in bytes. */
#define HEAP_BYTES (0x400)
/* After reset MCU will operate in Supervisor mode. To switch to User mode, set this macro to '1'. For more information
on the differences between these 2 modes see the CPU >> Processor Mode section of your MCU's hardware manual.
0 = Stay in Supervisor mode.
1 = Switch to User mode.
*/
#define RUN_IN_USER_MODE (0)
/* This macro lets other modules no if a RTOS is being used.
0 = RTOS is not used.
1 = RTOS is used.
*/
#define RTOS_USED (0)
/* Clock source select (CKSEL).
0 = Low Speed On-Chip Oscillator (LOCO)
1 = High Speed On-Chip Oscillator (HOCO)
2 = Main Clock Oscillator
3 = Sub-Clock Oscillator
4 = PLL Circuit
*/
#define CLOCK_SOURCE (4)
/* Clock configuration options.
The input clock frequency is specified and then the system clocks are set by specifying the multipliers used. The
multiplier settings are used to set the clock registers in resetprg.c. If a 16MHz clock is used and the
ICLK is 24MHz, PCLKB is 24MHz, FCLK is 24MHz, PCLKD is 24MHz, and CKO is 1MHz then the
settings would be:
XTAL_HZ = 16000000
PLL_DIV = 2
PLL_MUL = 6 (16MHz x 3 = 48MHz)
ICK_DIV = 2 : System Clock (ICLK) = (((XTAL_HZ/PLL_DIV) * PLL_MUL) / ICK_DIV) = 24MHz
PCKB_DIV = 2 : Peripheral Clock B (PCLKB) = (((XTAL_HZ/PLL_DIV) * PLL_MUL) / PCKB_DIV) = 24MHz
PCKD_DIV = 2 : Peripheral Clock D (PCLKD) = (((XTAL_HZ/PLL_DIV) * PLL_MUL) / PCKD_DIV) = 24MHz
FCK_DIV = 2 : Flash IF Clock (FCLK) = (((XTAL_HZ/PLL_DIV) * PLL_MUL) / FCK_DIV) = 24MHz
*/
/* XTAL - Input clock frequency in Hz */
#define XTAL_HZ (16000000)
/* PLL Input Frequency Divider Select (PLIDIV).
Available divisors = /1 (no division), /2, /4
*/
#define PLL_DIV (2)
/* PLL Frequency Multiplication Factor Select (STC).
Available multipliers = x6, x8
*/
#define PLL_MUL (6)
/* System Clock Divider (ICK).
Available divisors = /1 (no division), /2, /4, /8, /16, /32, /64
*/
#define ICK_DIV (2)
/* Peripheral Module Clock B Divider (PCKB).
Available divisors = /1 (no division), /2, /4, /8, /16, /32, /64
*/
#define PCKB_DIV (2)
/* Peripheral Module Clock D Divider (PCKD).
Available divisors = /1 (no division), /2, /4, /8, /16, /32, /64
*/
#define PCKD_DIV (2)
/* Flash IF Clock Divider (FCK).
Available divisors = /1 (no division), /2, /4, /8, /16, /32, /64
*/
#define FCK_DIV (2)
/* Below are callback functions that can be used for detecting MCU exceptions, undefined interrupt sources, and
bus errors. If the user wishes to be alerted of these events then they will need to define the macro as a
function to be called when the event occurs. For example, if the user wanted the function
excep_undefined_instr_isr() to be called when an undefined interrupt source ISR is triggered then they would
do the following:
#define UNDEFINED_INT_ISR_CALLBACK undefined_interrupt_cb
If the user does not wish to be alerted of these events then they should comment out the macros.
NOTE: When a callback function is called it will be called from within a ISR. This means that the function
will essentially be an interrupt and will hold off other interrupts that occur in the system while it
is executing. For this reason, it is recommended to keep these callback functions short as to not
decrease the real-time response of your system.
*/
/* Callback for Supervisor Instruction Violation Exception. */
//#define EXCEP_SUPERVISOR_ISR_CALLBACK supervisor_instr_cb
/* Callback for Undefined Instruction Exception. */
//#define EXCEP_UNDEFINED_INSTR_ISR_CALLBACK undefined_instr_cb
/* Callback for Non-maskable Interrupt. */
//#define NMI_ISR_CALLBACK nmi_cb
/* Callback for all undefined interrupt vectors. User can set a breakpoint in this function to determine which source
is creating unwanted interrupts. */
//#define UNDEFINED_INT_ISR_CALLBACK undefined_interrupt_cb
/* Callback for Bus Error Interrupt. */
//#define BUS_ERROR_ISR_CALLBACK bus_error_cb
/* The user has the option of separately choosing little or big endian for the User Application Area */
/* Endian mode for User Application.
0 = Big Endian
Else = Little Endian (Default)
*/
#define USER_APP_ENDIAN (1)
/* Configure WDT and IWDT settings.
OFS0 - Option Function Select Register 0
OFS0 - Option Function Select Register 0
b31:b15 Reserved (set to 1)
b14 IWDTSLCSTP - IWDT Sleep Mode Count Stop Control - (0=can't stop count, 1=stop w/some low power modes)
b13 Reserved (set to 1)
b12 IWDTRSTIRQS - IWDT Reset Interrupt Request - What to do on underflow (0=take interrupt, 1=reset MCU)
b11:b10 IWDTRPSS - IWDT Window Start Position Select - (0=25%, 1=50%, 2=75%, 3=100%,don't use)
b9:b8 IWDTRPES - IWDT Window End Position Select - (0=75%, 1=50%, 2=25%, 3=0%,don't use)
b7:b4 IWDTCKS - IWDT Clock Frequency Division Ratio - (0=none, 2=/16, 3 = /32, 4=/64, 0xF=/128, 5=/256)
b3:b2 IWDTTOPS - IWDT Timeout Period Select - (0=128 cycles, 1=512, 2=1024, 3=2048)
b1 IWDTSTRT - IWDT Start Mode Select - (0=auto-start after reset, 1=halt after reset)
b0 Reserved (set to 1) */
#define OFS0_REG_VALUE (0xFFFFFFFF) //Disable by default
/* Configure whether voltage detection 1 circuit and HOCO are enabled after reset.
OFS1 - Option Function Select Register 1
b31:b9 Reserved (set to 1)
b8 HOCOEN - Enable/disable HOCO oscillation after a reset (0=enable, 1=disable)
b7:b4 STUPLVD1LVL - Startup Voltage Monitoring 1 Reset Detection Level Select
0 1 0 0: 3.10 V
0 1 0 1: 3.00 V
0 1 1 0: 2.90 V
0 1 1 1: 2.79 V
1 0 0 0: 2.68 V
1 0 0 1: 2.58 V
1 0 1 0: 2.48 V
1 0 1 1: 2.06 V
1 1 0 0: 1.96 V
1 1 0 1: 1.86 V
b3:b2 Reserved (set to 1)
b2 STUPLVD1REN - Startup Voltage Monitoring 1 Reset Enable (1=monitoring disabled)
b0 FASTSTUP - Power-On Fast Startup Time (1=normal; read only) */
#define OFS1_REG_VALUE (0xFFFFFFFF) //Disable by default
/* Initializes C input & output library functions.
0 = Disable I/O library initialization in resetprg.c. If you are not using stdio then use this value.
1 = Enable I/O library initialization in resetprg.c. This is default and needed if you are using stdio. */
#define IO_LIB_ENABLE (1)
#endif /* R_BSP_CONFIG_REF_HEADER_FILE */

View file

@ -0,0 +1,63 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : rskrx111.h
* H/W Platform : RSKRX111
* Description : Board specific definitions for the RSKRX111.
***********************************************************************************************************************/
/***********************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 08.11.2012 0.01 Beta Release
***********************************************************************************************************************/
#ifndef RSKRX111_H
#define RSKRX111_H
/* Local defines */
#define LED_ON (0)
#define LED_OFF (1)
#define SET_BIT_HIGH (1)
#define SET_BIT_LOW (0)
#define SET_BYTE_HIGH (0xFF)
#define SET_BYTE_LOW (0x00)
/* Switches */
#define SW_ACTIVE 0
#define SW1 PORT3.PIDR.BIT.B0
#define SW2 PORT3.PIDR.BIT.B1
#define SW3 PORTE.PIDR.BIT.B4
#define SW1_PDR PORT3.PDR.BIT.B0
#define SW2_PDR PORT3.PDR.BIT.B1
#define SW3_PDR PORTE.PDR.BIT.B4
#define SW1_PMR PORT3.PMR.BIT.B0
#define SW2_PMR PORT3.PMR.BIT.B1
#define SW3_PMR PORTE.PMR.BIT.B4
/* LEDs */
#define LED0 PORTB.PODR.BIT.B7
#define LED1 PORTA.PODR.BIT.B0
#define LED2 PORT5.PODR.BIT.B4
#define LED3 PORT1.PODR.BIT.B7
#define LED0_PDR PORTB.PDR.BIT.B7
#define LED1_PDR PORTA.PDR.BIT.B0
#define LED2_PDR PORT5.PDR.BIT.B4
#define LED3_PDR PORT1.PDR.BIT.B7
#endif /* RSKRX111_H */

View file

@ -0,0 +1,366 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : hwsetup.c
* Device(s) : RX
* H/W Platform : RSKRX210
* Description : Defines the initialization routines used each time the MCU is restarted.
***********************************************************************************************************************/
/***********************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 08.11.2012 0.01 Beta Release
***********************************************************************************************************************/
/***********************************************************************************************************************
Includes <System Includes> , "Project Includes"
***********************************************************************************************************************/
/* I/O Register and board definitions */
#include "platform.h"
#include "r_switches_if.h"
/***********************************************************************************************************************
Private global variables and functions
***********************************************************************************************************************/
/* MCU I/O port configuration function delcaration */
static void output_ports_configure(void);
/* Interrupt configuration function delcaration */
static void interrupts_configure(void);
/* MCU peripheral module configuration function declaration */
static void peripheral_modules_enable(void);
/* Configure MCU clocks. */
static void clock_source_select (void);
void operating_frequency_set(void);
/***********************************************************************************************************************
* Function name: hardware_setup
* Description : Contains setup functions called at device restart
* Arguments : none
* Return value : none
***********************************************************************************************************************/
void vHardwareSetup(void)
{
operating_frequency_set();
output_ports_configure();
interrupts_configure();
peripheral_modules_enable();
}
/***********************************************************************************************************************
* Function name: output_ports_configure
* Description : Configures the port and pin direction settings, and sets the pin outputs to a safe level.
* Arguments : none
* Return value : none
***********************************************************************************************************************/
void output_ports_configure(void)
{
/* Enable LEDs. */
/* Start with LEDs off. */
LED0 = LED_OFF;
LED1 = LED_OFF;
LED2 = LED_OFF;
LED3 = LED_OFF;
/* Set LED pins as outputs. */
LED0_PDR = 1;
LED1_PDR = 1;
LED2_PDR = 1;
LED3_PDR = 1;
/* Enable switches. */
/* Set pins as inputs. */
SW1_PDR = 0;
SW2_PDR = 0;
SW3_PDR = 0;
/* Set port mode registers for switches. */
SW1_PMR = 0;
SW2_PMR = 0;
SW3_PMR = 0;
/* Unlock MPC registers to enable writing to them. */
MPC.PWPR.BIT.B0WI = 0 ; /* Unlock protection register */
MPC.PWPR.BIT.PFSWE = 1 ; /* Unlock MPC registers */
/* TXD1 is output. */
PORT1.PDR.BIT.B6 = 1;
PORT1.PMR.BIT.B6 = 1;
MPC.P16PFS.BYTE = 0x0A;
/* RXD1 is input. */
PORT1.PDR.BIT.B5 = 0;
PORT1.PMR.BIT.B5 = 1;
MPC.P15PFS.BYTE = 0x0A;
/* Configure the pin connected to the ADC Pot as an input */
PORT4.PDR.BIT.B4 = 0;
/* Protect off. */
SYSTEM.PRCR.WORD = 0xA50B;
/* Turn off module stop for the A2D converter. */
SYSTEM.MSTPCRA.BIT.MSTPA17 = 0;
/* Protect on. */
SYSTEM.PRCR.WORD = 0xA500;
/* Initialise the first button to generate an interrupt. */
R_SWITCHES_Init();
}
/***********************************************************************************************************************
* Function name: interrupts_configure
* Description : Configures interrupts used
* Arguments : none
* Return value : none
***********************************************************************************************************************/
void interrupts_configure(void)
{
/* Add code here to setup additional interrupts */
}
/***********************************************************************************************************************
* Function name: peripheral_modules_enable
* Description : Enables and configures peripheral devices on the MCU
* Arguments : none
* Return value : none
***********************************************************************************************************************/
void peripheral_modules_enable(void)
{
/* Enable triggers to start an ADC conversion. */
S12AD.ADCSR.BIT.TRGE = 1;
/* Only channel 4 is going to be used. */
S12AD.ADANSA.BIT.ANSA4 = 1;
}
/***********************************************************************************************************************
* Function name: operating_frequency_set
* Description : Configures the clock settings for each of the device clocks
* Arguments : none
* Return value : none
***********************************************************************************************************************/
void operating_frequency_set(void)
{
/* Used for constructing value to write to SCKCR and CKOCR registers. */
uint32_t temp_clock = 0;
/*
Clock Description Frequency
----------------------------------------
Input Clock Frequency............ 16 MHz
PLL frequency (x3)............... 48 MHz
Internal Clock Frequency......... 24 MHz
Peripheral Clock Frequency....... 24 MHz
Clock Out Frequency.............. 1 MHz */
volatile unsigned int i;
/* Protect off. */
SYSTEM.PRCR.WORD = 0xA50B;
/* Select the clock based upon user's choice. */
clock_source_select();
/* Figure out setting for FCK bits. */
#if FCK_DIV == 1
/* Do nothing since FCK bits should be 0. */
#elif FCK_DIV == 2
temp_clock |= 0x10000000;
#elif FCK_DIV == 4
temp_clock |= 0x20000000;
#elif FCK_DIV == 8
temp_clock |= 0x30000000;
#elif FCK_DIV == 16
temp_clock |= 0x40000000;
#elif FCK_DIV == 32
temp_clock |= 0x50000000;
#elif FCK_DIV == 64
temp_clock |= 0x60000000;
#else
#error "Error! Invalid setting for FCK_DIV in r_bsp_config.h"
#endif
/* Figure out setting for ICK bits. */
#if ICK_DIV == 1
/* Do nothing since ICK bits should be 0. */
#elif ICK_DIV == 2
temp_clock |= 0x01000000;
#elif ICK_DIV == 4
temp_clock |= 0x02000000;
#elif ICK_DIV == 8
temp_clock |= 0x03000000;
#elif ICK_DIV == 16
temp_clock |= 0x04000000;
#elif ICK_DIV == 32
temp_clock |= 0x05000000;
#elif ICK_DIV == 64
temp_clock |= 0x06000000;
#else
#error "Error! Invalid setting for ICK_DIV in r_bsp_config.h"
#endif
/* Figure out setting for PCKB bits. */
#if PCKB_DIV == 1
/* Do nothing since PCKB bits should be 0. */
#elif PCKB_DIV == 2
temp_clock |= 0x00000100;
#elif PCKB_DIV == 4
temp_clock |= 0x00000200;
#elif PCKB_DIV == 8
temp_clock |= 0x00000300;
#elif PCKB_DIV == 16
temp_clock |= 0x00000400;
#elif PCKB_DIV == 32
temp_clock |= 0x00000500;
#elif PCKB_DIV == 64
temp_clock |= 0x00000600;
#else
#error "Error! Invalid setting for PCKB_DIV in r_bsp_config.h"
#endif
/* Figure out setting for PCKD bits. */
#if PCKD_DIV == 1
/* Do nothing since PCKD bits should be 0. */
#elif PCKD_DIV == 2
temp_clock |= 0x00000001;
#elif PCKD_DIV == 4
temp_clock |= 0x00000002;
#elif PCKD_DIV == 8
temp_clock |= 0x00000003;
#elif PCKD_DIV == 16
temp_clock |= 0x00000004;
#elif PCKD_DIV == 32
temp_clock |= 0x00000005;
#elif PCKD_DIV == 64
temp_clock |= 0x00000006;
#else
#error "Error! Invalid setting for PCKD_DIV in r_bsp_config.h"
#endif
/* Set SCKCR register. */
SYSTEM.SCKCR.LONG = temp_clock;
/* Choose clock source. Default for r_bsp_config.h is PLL. */
SYSTEM.SCKCR3.WORD = ((uint16_t)CLOCK_SOURCE) << 8;
/* Protect on. */
SYSTEM.PRCR.WORD = 0xA500;
}
/***********************************************************************************************************************
* Function name: clock_source_select
* Description : Enables and disables clocks as chosen by the user. This function also implements the software delays
* needed for the clocks to stabilize.
* Arguments : none
* Return value : none
***********************************************************************************************************************/
static void clock_source_select (void)
{
/* Declared volatile for software delay purposes. */
volatile unsigned int i;
/* NOTE: AS OF VERSION 0.50 OF THE RX111 HARDWARE MANUAL, ALL OF THE CLOCK
* STABILIZATION TIMES ARE TBD. FOR NOW, WHERE EVER A WAIT COUNT REGISTER
* IS AVAILABLE, THE DELAY IS SET TO THE MAX NUMBER OF CYCLES. WHERE EVER
* DELAY LOOPS ARE PRESENT, THE VALUES FROM THE 63N ARE RE-USED. KEEP IN
* MIND THAT THE 63N RUNS ON A FASTER CRYSTAL.
*/
#if (CLOCK_SOURCE == 1)
/* HOCO is chosen. Start it operating. */
SYSTEM.HOCOCR.BYTE = 0x00;
/* The delay period needed is to make sure that the HOCO has stabilized.*/
for(i = 0; i< 28; i++) // tHOCOWT2 is TBD
{
__asm volatile( "NOP" );
}
#else
/* HOCO is not chosen. Stop the HOCO. */
SYSTEM.HOCOCR.BYTE = 0x01;
#endif
#if (CLOCK_SOURCE == 2)
/* Main clock oscillator is chosen. Start it operating. */
SYSTEM.MOSCWTCR.BYTE = 0x07; // Wait 65,536 cycles
/* Set the main clock to operating. */
SYSTEM.MOSCCR.BYTE = 0x00;
/* The delay period needed is to make sure that the main clock has stabilized. */
for(i = 0; i< 140; i++) // tMAINOSCWT is TBD
{
__asm volatile( "NOT" );
}
#endif
#if (CLOCK_SOURCE == 3)
/* Sub-clock oscillator is chosen. Start it operating. */
/* In section 9.8.4, there is a reference to a SOSCWTCR register, but there is no
* description for this register in the manual nor reference for it in iorx111.h. */
/* Set the sub-clock to operating. */
SYSTEM.SOSCCR.BYTE = 0x00;
/* The delay period needed is to make sure that the sub-clock has stabilized. */
for(i = 0; i< 30233; i++) // tSUBOSCWT0 is TBD
{
__asm volatile( "NOP" );
}
#else
/* Set the sub-clock to stopped. */
SYSTEM.SOSCCR.BYTE = 0x01;
#endif
#if (CLOCK_SOURCE == 4)
/* PLL is chosen. Start it operating. Must start main clock as well since PLL uses it. */
SYSTEM.MOSCWTCR.BYTE = 0x07; // Wait 65,536 cycles
/* Set the main clock to operating. */
SYSTEM.MOSCCR.BYTE = 0x00;
/* Set PLL Input Divisor. */
SYSTEM.PLLCR.BIT.PLIDIV = PLL_DIV >> 1;
/* Set PLL Multiplier. */
SYSTEM.PLLCR.BIT.STC = (PLL_MUL * 2) - 1;
/* Set the PLL to operating. */
SYSTEM.PLLCR2.BYTE = 0x00;
/* The delay period needed is to make sure that the main clock and PLL have stabilized. */
for(i = 0; i< 140; i++) // tPLLWT2 is TBD
{
__asm volatile( "NOP" );
}
#endif
/* LOCO is saved for last since it is what is running by default out of reset. This means you do not want to turn
it off until another clock has been enabled and is ready to use. */
#if (CLOCK_SOURCE == 0)
/* LOCO is chosen. This is the default out of reset. */
SYSTEM.LOCOCR.BYTE = 0x00;
#else
/* LOCO is not chosen and another clock has already been setup. Turn off the LOCO. */
SYSTEM.LOCOCR.BYTE = 0x01;
#endif
/* Make sure a valid clock was chosen. */
#if (CLOCK_SOURCE > 4) || (CLOCK_SOURCE < 0)
#error "ERROR - Valid clock source must be chosen in r_bsp_config.h using CLOCK_SOURCE macro."
#endif
}

View file

@ -0,0 +1,54 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : r_bsp.h
* Description : Has the header files that should be included for this platform.
***********************************************************************************************************************/
/***********************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 13.01.2012 1.00 First Release
* : 27.06.2012 1.10 Updated with new information to reflect udpated r_bsp structure.
***********************************************************************************************************************/
#ifndef PLATFORM_BOARD_USER
#define PLATFORM_BOARD_USER
/* Make sure that no other platforms have already been defined. Do not touch this! */
#ifdef PLATFORM_DEFINED
#error "Error - Multiple platforms defined in platform.h!"
#else
#define PLATFORM_DEFINED
#endif
/***********************************************************************************************************************
INCLUDE APPROPRIATE MCU AND BOARD FILES
***********************************************************************************************************************/
/* This is a user defined board. Start off by:
1)Copy and rename one of the 'board' folders that most closely matches your system (same MCU Series and Group).
2)Substitute in your MCU Group for the *MCU Group* option in the #include below for mcu_info.h.
3)Copy the other #includes from the r_bsp.h in the 'board' folder that you copied earlier.
4)Configure the BSP for your board by modifying the r_bsp_config_reference.h.
5)Copy r_bsp_config_reference.h to your project directory and rename it r_bsp_config.h.
You can also add your own include files here as well. */
#include "r_bsp_config.h"
#include ".\mcu\*MCU Group*\mcu_info.h"
#endif /* PLATFORM_BOARD_USER */

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,112 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2011 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : mcu_info.h
* Device(s) : RX111
* Description : Information about the MCU on this board (RSKRX111).
***********************************************************************************************************************/
/***********************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 08.11.2012 0.01 Beta Release
***********************************************************************************************************************/
#ifndef _MCU_INFO
#define _MCU_INFO
/***********************************************************************************************************************
Includes <System Includes> , "Project Includes"
***********************************************************************************************************************/
/* Gets MCU configuration information. */
#include "r_bsp_config.h"
/***********************************************************************************************************************
Macro definitions
***********************************************************************************************************************/
/* MCU Series. */
#if MCU_PART_SERIES == 0x0
#define MCU_SERIES_RX100 (1)
#else
#error "ERROR - MCU_PART_SERIES - Unknown MCU Series chosen in r_bsp_config.h"
#endif
/* MCU Group name. */
#if MCU_PART_GROUP == 0x1
#define MCU_RX111 (1)
#define MCU_RX11x (1)
#else
#error "ERROR - MCU_PART_GROUP - Unknown MCU Group chosen in r_bsp_config.h"
#endif
/* Package. */
#if MCU_PART_PACKAGE == 0x0
#define PACKAGE_LFQFP64 (1)
#elif MCU_PART_PACKAGE == 0x1
#define PACKAGE_LQFP64 (1)
#elif MCU_PART_PACKAGE == 0x2
#define PACKAGE_TFLGA64 (1)
#elif MCU_PART_PACKAGE == 0x3
#define PACKAGE_LFQFP48 (1)
#elif MCU_PART_PACKAGE == 0x4
#define PACKAGE_VQFN48 (1)
#elif MCU_PART_PACKAGE == 0x5
#define PACKAGE_HWQFN36 (1)
#elif MCU_PART_PACKAGE == 0x6
#define PACKAGE_WFLGA36 (1)
#elif MCU_PART_PACKAGE == 0x7
#define PACKAGE_SSOP36 (1)
#else
#error "ERROR - MCU_PART_PACKAGE - Unknown package chosen in r_bsp_config.h"
#endif
/* Memory size of your MCU. */
#if MCU_PART_MEMORY_SIZE == 0x0 // "J" parts
#define ROM_SIZE_BYTES (16384)
#define RAM_SIZE_BYTES (8192)
#define DF_SIZE_BYTES (8192)
#elif MCU_PART_MEMORY_SIZE == 0x1
#define ROM_SIZE_BYTES (32768)
#define RAM_SIZE_BYTES (10240)
#define DF_SIZE_BYTES (8192)
#elif MCU_PART_MEMORY_SIZE == 0x3
#define ROM_SIZE_BYTES (65536)
#define RAM_SIZE_BYTES (10240)
#define DF_SIZE_BYTES (8192)
#elif MCU_PART_MEMORY_SIZE == 0x4
#define ROM_SIZE_BYTES (98304)
#define RAM_SIZE_BYTES (16384)
#define DF_SIZE_BYTES (8192)
#elif MCU_PART_MEMORY_SIZE == 0x5
#define ROM_SIZE_BYTES (131072)
#define RAM_SIZE_BYTES (16384)
#define DF_SIZE_BYTES (8192)
#else
#error "ERROR - MCU_PART_MEMORY_SIZE - Unknown memory size chosen in r_bsp_config.h"
#endif
/* System clock speed in Hz. */
#define ICLK_HZ (((XTAL_HZ/PLL_DIV) * PLL_MUL) / ICK_DIV)
/* Peripheral Module Clock B speed in Hz. */
#define PCLKB_HZ (((XTAL_HZ/PLL_DIV) * PLL_MUL) / PCKB_DIV)
/* Peripheral Module Clock D speed in Hz. */
#define PCLKD_HZ (((XTAL_HZ/PLL_DIV) * PLL_MUL) / PCKD_DIV)
/* FlashIF clock speed in Hz. */
#define FCLK_HZ (((XTAL_HZ/PLL_DIV) * PLL_MUL) / FCK_DIV)
#endif /* _MCU_INFO */

View file

@ -0,0 +1,25 @@
/***********************************************************************/
/* */
/* PROJECT NAME : RTOSDemo_GCC */
/* FILE : typedefine.h */
/* DESCRIPTION : Aliases of Integer Type */
/* CPU SERIES : RX100 */
/* CPU TYPE : RX111 */
/* */
/* This file is generated by e2studio. */
/* */
/***********************************************************************/
typedef signed char _SBYTE;
typedef unsigned char _UBYTE;
typedef signed short _SWORD;
typedef unsigned short _UWORD;
typedef signed int _SINT;
typedef unsigned int _UINT;
typedef signed long _SDWORD;
typedef unsigned long _UDWORD;
typedef signed long long _SQWORD;
typedef unsigned long long _UQWORD;

View file

@ -0,0 +1,88 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : platform.h
* Description : The user chooses which MCU and board they are developing for in this file. If the board you are using
* is not listed below, please add your own or use the default 'User Board'.
***********************************************************************************************************************/
/***********************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 30.11.2011 1.00 First Release
* : 13.01.2012 1.10 Moved from having platform defined using macro defintion, to having platform defined
* by choosing an include path. This makes this file simpler and cleans up the issue
* where HEW shows all header files for all platforms under 'Dependencies'.
* : 14.02.2012 1.20 Added RX210 BSP.
* : 18.04.2012 1.30 Updated to v0.70 of FIT S/W Spec and v0.20 of FIT r_bsp Spec. This includes adding
* locking.c and locking.h in board folders. Also, r_bsp can now be configured through
* r_bsp_config.h.
* : 26.06.2012 1.40 Added new options such as exception callbacks and the ability to choose your MCU using
* its part number in r_bsp_config.h. Moved mcu_info.h to the 'mcu' folder. Made an effort
* to remove any extra files that the user would need to touch. Removed the flash_options.c
* file and put its contents in vecttbl.c.
* : 17.07.2012 1.50 Fixed bug with exception callback function names. Added BCLK_OUTPUT and SDCLK_OUTPUT
* macro options in r_bsp_config.h. Added some extra code to handle exceptions in
* vecttbl.c. Added vecttbl.h so that user has prototypes for exception callbacks.
* : 08.11.2012 1.60 Added RX111 BSP
***********************************************************************************************************************/
#ifndef _PLATFORM_H_
#define _PLATFORM_H_
/***********************************************************************************************************************
DEFINE YOUR SYSTEM - UNCOMMENT THE INCLUDE PATH FOR THE PLATFORM YOU ARE USING.
***********************************************************************************************************************/
/* RSKRX610 */
//#include "./board/rskrx610/r_bsp.h"
/* RSKRX62N */
//#include "./board/rskrx62n/r_bsp.h"
/* RSKRX62T */
//#include "./board/rskrx62t/r_bsp.h"
/* RDKRX62N */
//#include "./board/rdkrx62n/r_bsp.h"
/* RSKRX630 */
//#include "./board/rskrx630/r_bsp.h"
/* RSKRX63N */
//#include "./board/rskrx63n/r_bsp.h"
/* RDKRX63N */
//#include "./board/rdkrx63n/r_bsp.h"
/* RSKRX210 */
//#include "./board/rskrx210/r_bsp.h"
/* RSKRX111 */
#include "./board/rskrx111/r_bsp.h"
/* User Board - Define your own board here. */
//#include "./board/user/r_bsp.h"
/***********************************************************************************************************************
MAKE SURE AT LEAST ONE PLATFORM WAS DEFINED - DO NOT EDIT BELOW THIS POINT
***********************************************************************************************************************/
#ifndef PLATFORM_DEFINED
#error "Error - No platform defined in platform.h!"
#endif
#endif /* _PLATFORM_H_ */

View file

@ -0,0 +1,250 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : r_bsp_config_reference.c
* Device(s) : RX111
* Description : The file r_bsp_config.h is used to configure your BSP. r_bsp_config.h should be included
* somewhere in your package so that the r_bsp code has access to it. This file (r_bsp_config_reference.h)
* is just a reference file that the user can use to make their own r_bsp_config.h file.
************************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 07.11.2012 0.01 Beta Release
***********************************************************************************************************************/
#ifndef R_BSP_CONFIG_REF_HEADER_FILE
#define R_BSP_CONFIG_REF_HEADER_FILE
/***********************************************************************************************************************
Configuration Options
***********************************************************************************************************************/
/* Enter the product part number for your MCU. This information will be used to obtain information about your MCU such
as package and memory size.
To help parse this information, the part number will be defined using multiple macros.
R 5 F 51 11 5 A D FM
| | | | | | | | | Macro Name Description
| | | | | | | | |__MCU_PART_PACKAGE = Package type, number of pins, and pin pitch
| | | | | | | |____not used = Products with wide temperature range (D: -40 to 85C G: -40 to 105C)
| | | | | | |______not used = Blank
| | | | | |________MCU_PART_MEMORY_SIZE = ROM, RAM, and Data Flash Capacity
| | | | |___________MCU_PART_GROUP = Group name
| | | |______________MCU_PART_SERIES = Series name
| | |________________MCU_PART_MEMORY_TYPE = Type of memory (Flash)
| |__________________not used = Renesas MCU
|____________________not used = Renesas semiconductor product.
*/
/* Package type. Set the macro definition based on values below:
Character(s) = Value for macro = Package Type/Number of Pins/Pin Pitch
FM = 0x0 = LFQFP/64/0.50
FK = 0x1 = LQFP/64/0.80
LF = 0x2 = TFLGA/64/0.50
FL = 0x3 = LFQFP/48/0.50
NE = 0x4 = VQFN/48/0.50
NC = 0x5 = HWQFN/36/0.50
LM = 0x6 = WFLGA/36/0.50
SB = 0x7 = SSOP/36/0.80
*/
#define MCU_PART_PACKAGE (0x0)
/* ROM, RAM, and Data Flash Capacity.
Character(s) = Value for macro = ROM Size/Ram Size/Data Flash Size
5 = 0x5 = 128KB/16KB/8KB
4 = 0x4 = 96KB/16KB/8KB
3 = 0x3 = 64KB/10KB/8KB
1 = 0x1 = 32KB/10KB/8KB
J = 0x0 = 16KB/8KB/8KB
*/
#define MCU_PART_MEMORY_SIZE (0x5)
/* Group name.
Character(s) = Value for macro = Description
10 = 0x0 = RX110 Group
11 = 0x1 = RX111 Group
*/
#define MCU_PART_GROUP (0x1)
/* Series name.
Character(s) = Value for macro = Description
51 = 0x0 = RX100 Series
*/
#define MCU_PART_SERIES (0x0)
/* Memory type.
Character(s) = Value for macro = Description
F = 0x0 = Flash memory version
*/
#define MCU_PART_MEMORY_TYPE (0x0)
/* The 'BSP_DECLARE_STACK' macro is checked so that the stack is only declared in one place (resetprg.c). Every time a
'#pragma stacksize' is encountered, the stack size is increased. This prevents multiplication of stack size. */
#if defined(BSP_DECLARE_STACK)
/* User Stack size in bytes. The Renesas RX toolchain sets the stack size using the #pragma stacksize directive. */
#pragma stacksize su=0x400
/* Interrupt Stack size in bytes. The Renesas RX toolchain sets the stack size using the #pragma stacksize directive. */
#pragma stacksize si=0x100
#endif
/* Heap size in bytes. */
#define HEAP_BYTES (0x001)
/* After reset MCU will operate in Supervisor mode. To switch to User mode, set this macro to '1'. For more information
on the differences between these 2 modes see the CPU >> Processor Mode section of your MCU's hardware manual.
0 = Stay in Supervisor mode.
1 = Switch to User mode.
*/
#define RUN_IN_USER_MODE (0)
/* This macro lets other modules no if a RTOS is being used.
0 = RTOS is not used.
1 = RTOS is used.
*/
#define RTOS_USED (0)
/* Clock source select (CKSEL).
0 = Low Speed On-Chip Oscillator (LOCO)
1 = High Speed On-Chip Oscillator (HOCO)
2 = Main Clock Oscillator
3 = Sub-Clock Oscillator
4 = PLL Circuit
*/
#define CLOCK_SOURCE (4) // GI org 4
/* Clock configuration options.
The input clock frequency is specified and then the system clocks are set by specifying the multipliers used. The
multiplier settings are used to set the clock registers in resetprg.c. If a 16MHz clock is used and the
ICLK is 24MHz, PCLKB is 24MHz, FCLK is 24MHz, PCLKD is 24MHz, and CKO is 1MHz then the
settings would be:
XTAL_HZ = 16000000
PLL_DIV = 2
PLL_MUL = 6 (16MHz x 3 = 48MHz)
ICK_DIV = 2 : System Clock (ICLK) = (((XTAL_HZ/PLL_DIV) * PLL_MUL) / ICK_DIV) = 24MHz
PCKB_DIV = 2 : Peripheral Clock B (PCLKB) = (((XTAL_HZ/PLL_DIV) * PLL_MUL) / PCKB_DIV) = 24MHz
PCKD_DIV = 2 : Peripheral Clock D (PCLKD) = (((XTAL_HZ/PLL_DIV) * PLL_MUL) / PCKD_DIV) = 24MHz
FCK_DIV = 2 : Flash IF Clock (FCLK) = (((XTAL_HZ/PLL_DIV) * PLL_MUL) / FCK_DIV) = 24MHz
*/
/* XTAL - Input clock frequency in Hz */
#define XTAL_HZ (16000000)
/* PLL Input Frequency Divider Select (PLIDIV).
Available divisors = /1 (no division), /2, /4
*/
#define PLL_DIV (2) // GI org 2
/* PLL Frequency Multiplication Factor Select (STC).
Available multipliers = x6, x8
*/
#define PLL_MUL (6) // GI org 6
/* System Clock Divider (ICK).
Available divisors = /1 (no division), /2, /4, /8, /16, /32, /64
*/
#define ICK_DIV (2) // NOTE: ICLK CANNOT BE SLOWER THAN PCLK!
/* Peripheral Module Clock B Divider (PCKB).
Available divisors = /1 (no division), /2, /4, /8, /16, /32, /64
*/
#define PCKB_DIV (2) // GI org 2
/* Peripheral Module Clock D Divider (PCKD).
Available divisors = /1 (no division), /2, /4, /8, /16, /32, /64
*/
#define PCKD_DIV (2)
/* Flash IF Clock Divider (FCK).
Available divisors = /1 (no division), /2, /4, /8, /16, /32, /64
*/
#define FCK_DIV (2)
/* Below are callback functions that can be used for detecting MCU exceptions, undefined interrupt sources, and
bus errors. If the user wishes to be alerted of these events then they will need to define the macro as a
function to be called when the event occurs. For example, if the user wanted the function
excep_undefined_instr_isr() to be called when an undefined interrupt source ISR is triggered then they would
do the following:
#define UNDEFINED_INT_ISR_CALLBACK undefined_interrupt_cb
If the user does not wish to be alerted of these events then they should comment out the macros.
NOTE: When a callback function is called it will be called from within a ISR. This means that the function
will essentially be an interrupt and will hold off other interrupts that occur in the system while it
is executing. For this reason, it is recommended to keep these callback functions short as to not
decrease the real-time response of your system.
*/
/* Callback for Supervisor Instruction Violation Exception. */
//#define EXCEP_SUPERVISOR_ISR_CALLBACK supervisor_instr_cb
/* Callback for Undefined Instruction Exception. */
//#define EXCEP_UNDEFINED_INSTR_ISR_CALLBACK undefined_instr_cb
/* Callback for Non-maskable Interrupt. */
//#define NMI_ISR_CALLBACK nmi_cb
/* Callback for all undefined interrupt vectors. User can set a breakpoint in this function to determine which source
is creating unwanted interrupts. */
//#define UNDEFINED_INT_ISR_CALLBACK undefined_interrupt_cb
/* Callback for Bus Error Interrupt. */
//#define BUS_ERROR_ISR_CALLBACK bus_error_cb
/* The user has the option of separately choosing little or big endian for the User Application Area */
/* Endian mode for User Application.
0 = Big Endian
Else = Little Endian (Default)
*/
#define USER_APP_ENDIAN (1)
/* Configure WDT and IWDT settings.
OFS0 - Option Function Select Register 0
OFS0 - Option Function Select Register 0
b31:b15 Reserved (set to 1)
b14 IWDTSLCSTP - IWDT Sleep Mode Count Stop Control - (0=can't stop count, 1=stop w/some low power modes)
b13 Reserved (set to 1)
b12 IWDTRSTIRQS - IWDT Reset Interrupt Request - What to do on underflow (0=take interrupt, 1=reset MCU)
b11:b10 IWDTRPSS - IWDT Window Start Position Select - (0=25%, 1=50%, 2=75%, 3=100%,don't use)
b9:b8 IWDTRPES - IWDT Window End Position Select - (0=75%, 1=50%, 2=25%, 3=0%,don't use)
b7:b4 IWDTCKS - IWDT Clock Frequency Division Ratio - (0=none, 2=/16, 3 = /32, 4=/64, 0xF=/128, 5=/256)
b3:b2 IWDTTOPS - IWDT Timeout Period Select - (0=128 cycles, 1=512, 2=1024, 3=2048)
b1 IWDTSTRT - IWDT Start Mode Select - (0=auto-start after reset, 1=halt after reset)
b0 Reserved (set to 1) */
#define OFS0_REG_VALUE (0xFFFFFFFF) //Disable by default
/* Configure whether voltage detection 1 circuit and HOCO are enabled after reset.
OFS1 - Option Function Select Register 1
b31:b9 Reserved (set to 1)
b8 HOCOEN - Enable/disable HOCO oscillation after a reset (0=enable, 1=disable)
b7:b4 STUPLVD1LVL - Startup Voltage Monitoring 1 Reset Detection Level Select
0 1 0 0: 3.10 V
0 1 0 1: 3.00 V
0 1 1 0: 2.90 V
0 1 1 1: 2.79 V
1 0 0 0: 2.68 V
1 0 0 1: 2.58 V
1 0 1 0: 2.48 V
1 0 1 1: 2.06 V
1 1 0 0: 1.96 V
1 1 0 1: 1.86 V
b3:b2 Reserved (set to 1)
b2 STUPLVD1REN - Startup Voltage Monitoring 1 Reset Enable (1=monitoring disabled)
b0 FASTSTUP - Power-On Fast Startup Time (1=normal; read only) */
#define OFS1_REG_VALUE (0xFFFFFFFF) //Disable by default
/* Initializes C input & output library functions.
0 = Disable I/O library initialization in resetprg.c. If you are not using stdio then use this value.
1 = Enable I/O library initialization in resetprg.c. This is default and needed if you are using stdio. */
#define IO_LIB_ENABLE (0)
#endif /* R_BSP_CONFIG_REF_HEADER_FILE */

View file

@ -0,0 +1,100 @@
r_bsp Package
=============
Document Number
---------------
N/A
Version
-------
v1.60
Overview
--------
The r_bsp package provides a foundation for code to be built on top of. It provides startup code, iodefines, and MCU
information for different boards. There are 2 folders that make up the r_bsp package. The 'mcu' folder has iodefine
files and a file named 'mcu_info.h' for each MCU group. The 'mcu_info.h' file has information about the MCU on the board
and is configured based on the information given in r_bsp_config.h. The information in 'mcu_info.h' is used to help
configure Renesas middleware that uses the r_bsp package. The 'board' folder has a folder with startup code for each
supported board. Which MCU and board is chosen is decided by the settings in 'platform.h'. The user can choose which
board they are using by uncommenting the include path that applies to their board. For example, if you are using the
RSK+RX62N then you would uncomment the #include "./board/rskrx62n/r_bsp.h" include path. Users are encouraged to add
their own boards to the 'board' directory. BSPs are configured by using the r_bsp_config.h file. Each board will have a
reference configuration file named r_bsp_config_reference.h. The user should copy this file to their project, rename it
to r_bsp_config.h, and use the options inside the file to configure the BSP for their project.
Features
--------
* Provides foundation to build code on top of.
* Provides MCU startup code.
* Provides SFR access through iodefine.h
* Stores details of MCU in 'mcu_info.h' to help configure Renesas middleware.
* Easily configure BSP through r_bsp_config.h.
* Choose MCU easily by inputting part number details in r_bsp_config.h.
* Provides callbacks for MCU exceptions and the bus error interrupt.
Limitations
-----------
N/A
Peripherals Used Directly
-------------------------
N/A
Required Packages
-----------------
* r_glyph [required if you want to use LCD for RDK boards]
* r_rspi_rx [required if you want to use LCD for RDK boards]
How to add to your project
--------------------------
* Copy the r_bsp folder to your project.
* Add an include path to the 'r_bsp' directory.
* Add all of the source files for your board from the 'r_bsp\board\--YOUR_BOARD--' directory to your project.
* Uncomment the include path for your board in 'platform.h' which is located in the 'r_bsp' directory.
* Copy the file r_bsp_config_reference.h from the 'r_bsp\board\--YOUR_BOARD--' directory and copy it to your project's
source code directory. Rename the file r_bsp_config.h.
* Open r_bsp_config.h and use the macros to configure the BSP for your project.
File Structure
--------------
r_bsp
| platform.h (choose which board is being used)
| readme.txt
|
+---board (contains supported boards)
| +---rdkrx62n (contains BSP source and header files)
| |
| +---rdkrx63n
| |
| +---rskrx111
| |
| +---rskrx210
| |
| +---rskrx610
| |
| +---rskrx62n
| |
| +---rskrx62t
| |
| +---rskrx630
| |
| +---rskrx63n
| |
| \---user
|
\---mcu
+---rx111 (contains common files to this MCU group, e.g. iodefine.h)
|
+---rx210
|
+---rx610
|
+---rx62n
|
+---rx62t
|
+---rx630
|
\---rx63n

View file

@ -0,0 +1,47 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2011 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : r_switches_config.c
* Description : Configures the switches code
************************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 17.01.2012 1.00 First Release
* : 17.02.2012 1.10 Added RSKRX210 support.
* : 08.03.2012 1.20 Added GetVersion() function (though it's really a macro).
* : 04.06.2012 1.30 Code can now be interrupt or poll driven.
***********************************************************************************************************************/
#ifndef SWITCHES_CONFIG_HEADER_FILE
#define SWITCHES_CONFIG_HEADER_FILE
/***********************************************************************************************************************
Configuration Options
***********************************************************************************************************************/
/* This macro sets whether interrupts or polling is used for detecting switch presses. The benefit of using interrupts
is that no extra processing is used for polling and the use of a system timer tick is not a requirement. The downside
of using interrupts is that callback functions are called from within an interrupt so if your ISR is long then it can
degrade the real-time response of your system. The benefit of polling is that functions are called at the application
level and debouncing is supported. The downside to polling is that your system must call the R_SWITCHES_Update() on a
regular basis which requires extra processing.
0 = Use interrupts
1 = Use polling
*/
#define SWITCHES_DETECTION_MODE (0)
#endif /* SWITCHES_CONFIG_HEADER_FILE */

View file

@ -0,0 +1,72 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2011 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : r_switches_if.h
* Description : Functions for using switches with callback functions.
************************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 17.01.2012 1.00 First Release
* : 17.02.2012 1.10 Added RSKRX210 support.
* : 08.03.2012 1.20 Added GetVersion() function (though it's really a macro).
* : 04.06.2012 1.30 Code can now be interrupt or poll driven.
***********************************************************************************************************************/
#ifndef SWITCHES_API_HEADER_FILE
#define SWITCHES_API_HEADER_FILE
/***********************************************************************************************************************
Includes <System Includes> , "Project Includes"
***********************************************************************************************************************/
/* Fixed width integer support. */
#include <stdint.h>
/* Used for configuring the code */
#include "r_switches_config.h"
/***********************************************************************************************************************
Macro definitions
***********************************************************************************************************************/
/* Version Number of API. */
#define SWITCHES_VERSION_MAJOR (1)
#define SWITCHES_VERSION_MINOR (0)
/* The process of getting the version number is done through the macro below. The version number is encoded where the
top 2 bytes are the major version number and the bottom 2 bytes are the minor version number. For example,
Version 4.25 would be returned as 0x00040019. */
#define R_SWITCHES_GetVersion() ((((uint32_t)SWITCHES_VERSION_MAJOR) << 16) | (uint32_t)SWITCHES_VERSION_MINOR)
/***********************************************************************************************************************
Public Functions
***********************************************************************************************************************/
void R_SWITCHES_Init(void);
void R_SWITCHES_Update(void);
/* Callback prototypes. */
#if defined(SW1_CALLBACK_FUNCTION)
void SW1_CALLBACK_FUNCTION(void);
#endif
#if defined(SW2_CALLBACK_FUNCTION)
void SW2_CALLBACK_FUNCTION(void);
#endif
#if defined(SW3_CALLBACK_FUNCTION)
void SW3_CALLBACK_FUNCTION(void);
#endif
#endif /* SWITCHES_API_HEADER_FILE */

View file

@ -0,0 +1,83 @@
PLEASE REFER TO THE APPLICATION NOTE FOR THIS MIDDLEWARE FOR MORE INFORMATION
Switches
========
Document Number
---------------
N/A
Version
-------
v1.40
Overview
--------
Configures port pins for switches and calls user defined function on switch press. Switch presses can be detected using
IRQ interrupts or by polling. The benefit of using interrupts is that no extra processing is used for polling and the
use of a system timer tick is not a requirement. The downside of using interrupts is that callback functions are called
from within an interrupt so if your ISR is long then it can degrade the real-time response of your system. The benefit
of polling is that functions are called at the application level and debouncing is supported. The downside to polling is
that your system must call the R_SWITCHES_Update() on a regular basis which requires extra processing.
Features
--------
* Call one function to setup switches.
* Define function to call when switch is pressed.
* Can be configured to be interrupt or poll driven.
Supported MCUs
--------------
* RX610 Group
* RX621, RX62N Group
* RX62T Group
* RX630 Group
* RX631, RX63N Group
* RX210 Group
* RX111 Group
Boards Tested On
----------------
* RSKRX610
* RSK+RX62N
* RSKRX62T
* RDKRX62N
* RSKRX630
* RSKRX63N
* RDKRX63N
* RSKRX111
Limitations
-----------
* None
Peripherals Used Directly
-------------------------
* None
Required Packages
-----------------
* None
How to add to your project
--------------------------
* Add src\r_switches.c to your project.
* Add an include path to the 'r_switches' directory.
* Add an include path to the 'r_switches\src' directory.
* Configure middleware through r_switches_config.h.
* Add a #include for r_switches_if.h to files that need to use this package.
Toolchain(s) Used
-----------------
* Renesas RX v1.02
File Structure
--------------
r_switches
| readme.txt
| r_switches_config.h
| r_switches_if.h
|
\---src
r_switches.c

View file

@ -0,0 +1,232 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2011 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : r_switches.c
* Description : Functions for using switches with callback functions.
************************************************************************************************************************
* History : DD.MM.YYYY Version Description
* : 17.01.2012 1.00 First Release
* : 17.02.2012 1.10 Added RSKRX210 support.
* : 08.03.2012 1.20 Added GetVersion() function (though it's really a macro).
* : 04.06.2012 1.30 Code can now be interrupt or poll driven.
* : 07.11.2012 1.40 Added support for RSKRX111
***********************************************************************************************************************/
/***********************************************************************************************************************
Includes <System Includes> , "Project Includes"
***********************************************************************************************************************/
/* Board and MCU support. */
#include "platform.h"
/* Switches prototypes. */
#include "r_switches_if.h"
/* Scheduler includes. */
#include "FreeRTOS.h"
typedef int bool;
/***********************************************************************************************************************
Macro definitions
***********************************************************************************************************************/
/* This helps reduce the amount of unique code for each supported board. */
#define X_IRQ( x ) XX_IRQ( x )
#define XX_IRQ( x ) _ICU_IRQ##x
/* These macros define which IRQ pins are used for the switches. Note that these defintions cannot have parentheses
around them. */
#if defined(PLATFORM_BOARD_RSKRX111)
#define SW1_IRQ_NUMBER 0
#define SW2_IRQ_NUMBER 1
#define SW3_IRQ_NUMBER 4
#else
#error This file is only for use on the RX100 RSK
#endif
/* Number of switches on this board. */
#define SWITCHES_NUM (3)
/* Register definitions not yet correct in iorx111.h. */
#define MPC_P30PFS_REG ( * ( unsigned char * ) 0x0008C158 )
#define MPC_P31PFS_REG ( * ( unsigned char * ) 0x0008C159 )
#define MPC_PE4PFS_REG ( * ( unsigned char * ) 0x0008C1B4 )
/***********************************************************************************************************************
Typedef definitions
***********************************************************************************************************************/
typedef struct
{
bool active;
int32_t debounce_cnt;
} switch_t;
/***********************************************************************************************************************
Private global variables and functions
***********************************************************************************************************************/
#if SWITCHES_DETECTION_MODE == 1
/* Update Hz */
static uint32_t g_sw_debounce_cnts;
/* Used for debounce. */
switch_t g_switches[SWITCHES_NUM];
#endif
/***********************************************************************************************************************
* Function Name: R_SWITCHES_Init
* Description : Initializes pins to be input and interrupt on switch presses.
* Arguments :
* Return Value : none
***********************************************************************************************************************/
void R_SWITCHES_Init (void)
{
/* Unlock protection register */
MPC.PWPR.BYTE &= 0x7F;
/* Unlock MPC registers */
MPC.PWPR.BYTE |= 0x40;
/* Make switch pins inputs. */
PORT3.PDR.BYTE &= 0xFC;
PORTE.PDR.BYTE &= 0xEF;
/* Set port mode registers for switches. */
PORT3.PMR.BYTE &= 0xFC;
PORTE.PMR.BYTE &= 0xEF;
MPC_P30PFS_REG = 0x40; /* P30 is used as IRQ pin */
MPC_P31PFS_REG = 0x40; /* P31 is used as IRQ pin */
MPC_PE4PFS_REG = 0x40; /* PE4 is used as IRQ pin */
/* Set IRQ type (falling edge) */
ICU.IRQCR[ SW1_IRQ_NUMBER ].BYTE = 0x04;
ICU.IRQCR[ SW2_IRQ_NUMBER ].BYTE = 0x04;
ICU.IRQCR[ SW3_IRQ_NUMBER ].BYTE = 0x04;
/* Set interrupt priorities, which must be below
configMAX_SYSCALL_INTERRUPT_PRIORITY. */
_IPR( X_IRQ(SW1_IRQ_NUMBER) ) = configKERNEL_INTERRUPT_PRIORITY;
_IPR( X_IRQ(SW2_IRQ_NUMBER) ) = configKERNEL_INTERRUPT_PRIORITY;
_IPR( X_IRQ(SW3_IRQ_NUMBER) ) = configKERNEL_INTERRUPT_PRIORITY;
/* Clear any pending interrupts */
_IR( X_IRQ(SW1_IRQ_NUMBER) ) = 0;
_IR( X_IRQ(SW2_IRQ_NUMBER) ) = 0;
_IR( X_IRQ(SW3_IRQ_NUMBER) ) = 0;
/* Enable the interrupts */
_IEN( X_IRQ(SW1_IRQ_NUMBER) ) = 1;
_IEN( X_IRQ(SW2_IRQ_NUMBER) ) = 1;
_IEN( X_IRQ(SW3_IRQ_NUMBER) ) = 1;
}
/* If using polling then the user must call the update function. */
/***********************************************************************************************************************
* Function name: R_SWITCHES_Update
* Description : Polls switches and calls callback functions as needed. If you are using IRQ mode then this function
* is not needed and can be removed if desired. It is left in so that code will not fail when switching
* between polling or IRQ mode.
* Arguments : none
* Return value : none
***********************************************************************************************************************/
void R_SWITCHES_Update (void)
{
#if SWITCHES_DETECTION_MODE == 1
/* This code is only needed for polling mode. */
/* Check switch 1. */
if (SW1 == SW_ACTIVE)
{
if (g_switches[0].active != true)
{
if (++g_switches[0].debounce_cnt >= g_sw_debounce_cnts)
{
/* Set this to true so we only call the callback function once per press. */
g_switches[0].active = true;
/* Call callback function. */
SW1_CALLBACK_FUNCTION();
}
}
}
else
{
if (0 == g_switches[0].debounce_cnt)
{
g_switches[0].active = false;
}
else
{
g_switches[0].debounce_cnt--;
}
}
/* Check switch 2. */
if (SW2 == SW_ACTIVE)
{
if (g_switches[1].active != true)
{
if (++g_switches[1].debounce_cnt >= g_sw_debounce_cnts)
{
/* Set this to true so we only call the callback function once per press. */
g_switches[1].active = true;
/* Call callback function. */
SW2_CALLBACK_FUNCTION();
}
}
}
else
{
if (0 == g_switches[1].debounce_cnt)
{
g_switches[1].active = false;
}
else
{
g_switches[1].debounce_cnt--;
}
}
/* Check switch 3. */
if (SW3 == SW_ACTIVE)
{
if (g_switches[2].active != true)
{
if (++g_switches[2].debounce_cnt >= g_sw_debounce_cnts)
{
/* Set this to true so we only call the callback function once per press. */
g_switches[2].active = true;
/* Call callback function. */
SW3_CALLBACK_FUNCTION();
}
}
}
else
{
if (0 == g_switches[2].debounce_cnt)
{
g_switches[2].active = false;
}
else
{
g_switches[2].debounce_cnt--;
}
}
#endif /* SWITCHES_DETECTION_MODE */
}