Freescale S12

From ErikaWiki

(Difference between revisions)
Jump to: navigation, search
(Examples)
(CPUs)
Line 32: Line 32:
= CPUs =
= CPUs =
-
*S12 Hardware Abstraction Layer: S12 HAL now integrates the Erika HAL common files (see [http://svn.tuxfamily.org/viewvc.cgi/erika_erikae/repos/ee/trunk/ee/pkg/cpu/common/ 'pkg/cpu/common'] folder and [http://erika.tuxfamily.org/wiki/index.php?title=Common_files_for_the_HAL Common_files_for_the_HAL] for further info). This feature simplifies future extensions for other S12 devices and ensures greater code stability against changes to the kernel code.
+
*S12 Hardware Abstraction Layer (since Erika revision 1531): S12 HAL now integrates the Erika HAL common files (see [http://svn.tuxfamily.org/viewvc.cgi/erika_erikae/repos/ee/trunk/ee/pkg/cpu/common/ 'pkg/cpu/common'] folder and [http://erika.tuxfamily.org/wiki/index.php?title=Common_files_for_the_HAL Common_files_for_the_HAL] for further info). This feature simplifies future extensions for other S12 devices and ensures greater code stability against changes to the kernel code.
= MCUs =
= MCUs =

Revision as of 15:48, 7 December 2011

Contents

Freescale S12 support

ERIKA Enterprise supports HCS12X microcontrollers. The support for RT-Druid is now available .
The HCS12X support includes:

  1. support for COSMIC compiler(since Erika release 1.5.0)
  2. support for CODEWARRIOR CWS12v5.1 compiler (since Erika release 1.6.0).
  3. support for single and multi stack configurations.
  4. ISR interrupt supported.
  5. support for Freescale HIWAVE Debugger.
  • Supported compiler
    • COSMIC C cross compiler and ELF module generation for debugging information.
    • CODEWARRIOR CWS12v5.1 compiler and ELF module generation for debugging information.
  • CODEWARRIOR compiler is enabled adding this option in the conf.oil file:
 EE_OPT = "__CODEWARRIOR__";
  • If the compiler evaluation license is expired, you may have to add also this option to avoid syntax errors during the compilation:
 EE_OPT = "CW_EVAL_VERSION"; 
  • Mode of operation
    • Mono-stack: The Monostack configuration of the ERIKA Kernel models the fact that all tasks and ISRs in the system share the same stack.
    • Multistack HAL: Every thread can have its private stack, or it can share it with other threads.
  • Handling of paging registers
The compiler supports bank switching for code and data, using the internal window mechanism provided by the HCS12X processor.
Bank switching mechanism delivers 32-bit performance with all the advantages and efficiencies of a 16-bit MCU.
Bank switching is supported via:
- @far type qualifier to describe a function relocated in a different bank. Calling such a function implies a special calling
sequence, and a special return sequence. Such a function has to be defined @far and referenced as @far in all the files using
it. The compiler also provides a specific option +modf to automatically consider all the functions to be @far. The @far type
modifier is also used to declared variables allocated in a data bank.
- Linker options are required to ensure proper physical and logical addresses computations. The linker is also able to
automatically fill banks without any need to take care of the page boundaries.

CPUs

  • S12 Hardware Abstraction Layer (since Erika revision 1531): S12 HAL now integrates the Erika HAL common files (see 'pkg/cpu/common' folder and Common_files_for_the_HAL for further info). This feature simplifies future extensions for other S12 devices and ensures greater code stability against changes to the kernel code.

MCUs

  • The MCUs currently supported are the following:
    • Freescale MC9S12XS128; (an efficient 16-bit microcontroller with four modes of operation: normal single chip mode, normal single chip mde with active background debug mode, stop low power mode, wait low power mode).
  • List of functions:
    • void EE_pit0_init( unsigned char pitmtld0, unsigned char pitld0, unsigned char prio ); // To init PIT0
    • void EE_pit0_close( void ); // To close PIT0
    • void EE_pit0_clear_ISRflag( void ); // To clean PIT0 ISR flag
    • void EE_sci_open(unsigned char sci_num, unsigned long int baudrate); // To open the serial interface. Requires: EE_set_peripheral_frequency_mhz(f_mhz)
    • void EE_sci_close(unsigned char sci_num); // To close the serial interface
    • Bool EE_sci_send_byte(unsigned char sci_num, unsigned char buffer); // To send a byte
    • Bool EE_sci_send_string(unsigned char sci_num, const char* s, unsigned int num); // to send a string
    • Bool EE_sci_send_bytes(unsigned char sci_num, char* v, unsigned int num); // To send a vector of bytes
    • Bool EE_sci_get_byte(unsigned char sci_num, unsigned char *buffer); // to get a byte
    • Bool EE_sci_getcheck(unsigned char sci_num); // to check the serial reception of a byte
    • int EE_timer_init_us(EE_UINT16 tim_id, EE_UINT32 period_us, EE_UINT8 isr_mode) // init timer. Requires: EE_set_peripheral_frequency_mhz(f_mhz)
    • int EE_timer_init_ms(EE_UINT16 tim_id, EE_UINT16 period_ms, EE_UINT8 isr_mode) // init timer. Requires: EE_set_peripheral_frequency_mhz(f_mhz)
    • void EE_timer_start() // start timer
    • void EE_timer_stop() // stop timer
    • void EE_timer_reset() // reset timer
    • void EE_timer_clear_ISRflag(EE_UINT16 tim_id) // clear interrrupt flag
    • EE_UINT16 EE_timer_get_counter() // get counter
    • void EE_timer_enable_ISR(EE_UINT16 tim_id, EE_UINT8 isr_mode) // enable IRQ
    • void EE_timer_disable_ISR(EE_UINT16 tim_id) // disable IRQ

Boards

  • The boards currently supported are the following:
    • SofTec Microsystems DEMO9S12XSFAME demo board.
    • Freescale Axiom TWRS12G128 evaluation board.
  • DEMO9S12XSFAME: List of functions (refer to demo9s12xsfame)
    • void EE_demo9s12xsfame_leds_init(void); // To configure the leds port
    • void EE_demo9s12xsfame_leds( EE_UINT8 data ); // To set the led port vaules
    • void EE_demo9s12xsfame_led_0_on(void); // To turn on LED0
    • void EE_demo9s12xsfame_led_0_off(void); // To turn off LED0
    • void EE_demo9s12xsfame_led_1_on(void); // To turn on LED1
    • void EE_demo9s12xsfame_led_1_off(void); // To turn off LED1
    • void EE_demo9s12xsfame_led_2_on(void); // To turn on LED2
    • void EE_demo9s12xsfame_led_2_off(void); // To turn off LED2
    • void EE_demo9s12xsfame_led_3_on(void); // To turn on LED3
    • void EE_demo9s12xsfame_led_3_off(void); // To turn off LED3
    • void EE_demo9s12xsfame_leds_on(void); // To turn on all the leds
    • void EE_demo9s12xsfame_leds_off(void); // To turn off all the leds
    • void EE_demo9s12xsfame_buttons_init( EE_UINT8 bx, EE_UINT8 prio ); // To init the buttons port
    • void EE_demo9s12xsfame_buttons_close( void ); // To reset the buttons port
    • void EE_demo9s12xsfame_buttons_disable_interrupts( EE_UINT8 bx ); // To disable interrupt related to the buttons
    • void EE_demo9s12xsfame_buttons_enable_interrupts( EE_UINT8 bx ); // To enable interrupt related to the buttons
    • void EE_demo9s12xsfame_buttons_clear_ISRflag( EE_UINT8 bx ); // To clear button ISR flag
    • EE_UINT8 EE_demo9s12xsfame_button_get_B0( void ); // To get the BUTTON0 value
    • EE_UINT8 EE_demo9s12xsfame_button_get_B1( void ); // To get the BUTTON1 value
    • void EE_demo9s12xsfame_adc_init( unsigned char res, unsigned char numconvseq ); // To init ADC
    • void EE_demo9s12xsfame_adc_convert( void ); // To start conversion
    • unsigned int EE_demo9s12xsfame_adc_getvalue( unsigned int adcch ); // To get a value
    • void EE_demo9s12xsfame_adc_close( void ); // To close ADC
    • EE_UINT16 EE_demo9s12xsfame_analog_get_light( void ); // To get light sensor value
    • EE_UINT16 EE_demo9s12xsfame_analog_get_pot( void ); // To get potentiometer value
  • TWRS12G128: List of functions (refer to twrs12g128)
    • void EE_leds_init() or EE_twrs12g128_leds_init()
    • void EE_leds(EE_UINT8 data) or EE_twrs12g128_leds(EE_UINT8 data)
    • void EE_led_1_on() or EE_twrs12g128_led_1_on()
    • void EE_led_1_off() or EE_twrs12g128_led_1_off()
    • void EE_led_2_on() or EE_twrs12g128_led_2_on()
    • void EE_led_2_off() or EE_twrs12g128_led_2_off()
    • void EE_led_3_on() or EE_twrs12g128_led_3_on()
    • void EE_led_3_off() or EE_twrs12g128_led_3_off()
    • void EE_led_4_on() or EE_twrs12g128_led_4_on()
    • void EE_led_4_off() or EE_twrs12g128_led_4_off()
    • void EE_led_1_toggle() or EE_twrs12g128_led_1_toggle()
    • void EE_led_2_toggle() or EE_twrs12g128_led_2_toggle()
    • void EE_led_3_toggle() or EE_twrs12g128_led_3_toggle()
    • void EE_led_4_toggle() or EE_twrs12g128_led_4_toggle()
    • void EE_leds_on() or EE_twrs12g128_leds_on()
    • void EE_leds_off() or EE_twrs12g128_leds_off()
    • void EE_buttons_init(EE_UINT8 bx) or EE_twrs12g128_buttons_init(EE_UINT8 bx)
    • void EE_buttons_close or EE_twrs12g128_buttons_close()
    • EE_UINT8 EE_button_get_B1() or EE_twrs12g128_button_get_B1()
    • EE_UINT8 EE_button_get_B2() or EE_twrs12g128_button_get_B2()
    • EE_UINT8 EE_button_get_B3() or EE_twrs12g128_button_get_B3()
    • EE_UINT8 EE_button_get_B4() or EE_twrs12g128_button_get_B4()

Examples

Download and install

  • The S12 plug-in for Eclipse is part of the official distribution of RT-Druid.

The procedure to install (or update) Erika and RT-Druid 1.5.1 plugins is described at Tutorial: Update ERIKA and RT-Druid.

The procedure to install (or update) Erika and RT-Druid 1.6.0 plugins is very similar to the previous but the web addresses can be different.

How to build a project in RT-DRUID

How to run MODISTARC regression tests

Personal tools