Freescale S12
From ErikaWiki
(Difference between revisions)
(→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:
- support for COSMIC compiler(since Erika release 1.5.0)
- support for CODEWARRIOR CWS12v5.1 compiler (since Erika release 1.6.0).
- support for single and multi stack configurations.
- ISR interrupt supported.
- 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
- The examples and tests are available in this folders:
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.