From 285f508cc93f63627ef44cb06a499c44a5e01c38 Mon Sep 17 00:00:00 2001 From: maralvira Date: Thu, 10 Jun 2010 14:49:31 +0000 Subject: [PATCH] initial commit of src files --- cpu/mc1322x/src/default_lowlevel.c | 72 ++++++++++++ cpu/mc1322x/src/default_lowlevel.h | 45 +++++++ cpu/mc1322x/src/isr.c | 74 ++++++++++++ cpu/mc1322x/src/start.S | 182 +++++++++++++++++++++++++++++ 4 files changed, 373 insertions(+) create mode 100644 cpu/mc1322x/src/default_lowlevel.c create mode 100644 cpu/mc1322x/src/default_lowlevel.h create mode 100644 cpu/mc1322x/src/isr.c create mode 100644 cpu/mc1322x/src/start.S diff --git a/cpu/mc1322x/src/default_lowlevel.c b/cpu/mc1322x/src/default_lowlevel.c new file mode 100644 index 000000000..4814f5e58 --- /dev/null +++ b/cpu/mc1322x/src/default_lowlevel.c @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2010, Mariano Alvira and other contributors + * to the MC1322x project (http://mc1322x.devl.org) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of libmc1322x: see http://mc1322x.devl.org + * for details. + * + * $Id: default_lowlevel.c,v 1.1 2010/06/10 14:49:31 maralvira Exp $ + */ + +#include +#include + +void default_vreg_init(void) { + volatile uint32_t i; + *CRM_SYS_CNTL = 0x00000018; /* set default state */ + *CRM_VREG_CNTL = 0x00000f04; /* bypass the buck */ + for(i=0; i<0x161a8; i++) { continue; } /* wait for the bypass to take */ +// while((((*(volatile uint32_t *)(0x80003018))>>17) & 1) !=1) { continue; } /* wait for the bypass to take */ + *CRM_VREG_CNTL = 0x00000ff8; /* start the regulators */ +} + +void uart1_init(uint16_t inc, uint16_t mod, uint8_t samp) { + + /* UART must be disabled to set the baudrate */ + *UART1_UCON = 0; + *UART1_UBRCNT = ( inc << 16 ) | mod; + + /* see Section 11.5.1.2 Alternate Modes */ + /* you must enable the peripheral first BEFORE setting the function in GPIO_FUNC_SEL */ + /* From the datasheet: "The peripheral function will control operation of the pad IF */ + /* THE PERIPHERAL IS ENABLED. */ + *UART1_UCON = (1 << 0) | (1 << 1); /* enable receive, transmit */ + if(samp == UCON_SAMP_16X) + set_bit(*UART1_UCON,UCON_SAMP); + *GPIO_FUNC_SEL0 = ( (0x01 << (14*2)) | (0x01 << (15*2)) ); /* set GPIO15-14 to UART (UART1 TX and RX)*/ + + /* interrupt when there are this number or more bytes free in the TX buffer*/ + *UART1_UTXCON = 16; + + u1_head = 0; u1_tail = 0; + + /* tx and rx interrupts are enabled in the UART by default */ + /* see status register bits 13 and 14 */ + /* enable UART1 interrupts in the interrupt controller */ + enable_irq(UART1); +} diff --git a/cpu/mc1322x/src/default_lowlevel.h b/cpu/mc1322x/src/default_lowlevel.h new file mode 100644 index 000000000..527a79e1a --- /dev/null +++ b/cpu/mc1322x/src/default_lowlevel.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2010, Mariano Alvira and other contributors + * to the MC1322x project (http://mc1322x.devl.org) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of libmc1322x: see http://mc1322x.devl.org + * for details. + * + * $Id: default_lowlevel.h,v 1.1 2010/06/10 14:49:31 maralvira Exp $ + */ + +#ifndef LOWLEVEL_H +#define LOWLEVEL_H + +#include "types.h" + +#define trim_xtal() pack_XTAL_CNTL(CTUNE_4PF, CTUNE, FTUNE, IBIAS) +void default_vreg_init(void); +void uart1_init(uint16_t inc, uint16_t mod, uint8_t samp); + +#endif diff --git a/cpu/mc1322x/src/isr.c b/cpu/mc1322x/src/isr.c new file mode 100644 index 000000000..6f2f1eba4 --- /dev/null +++ b/cpu/mc1322x/src/isr.c @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2010, Mariano Alvira and other contributors + * to the MC1322x project (http://mc1322x.devl.org) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of libmc1322x: see http://mc1322x.devl.org + * for details. + * + * $Id: isr.c,v 1.1 2010/06/10 14:49:31 maralvira Exp $ + */ + +#include +#include + +__attribute__ ((section (".irq"))) +__attribute__ ((interrupt("IRQ"))) +void irq(void) +{ + uint32_t pending; + + while ((pending = *NIPEND)) { + + if(bit_is_set(pending, INT_NUM_TMR)) { + /* dispatch to individual timer isrs if they exist */ + /* timer isrs are responsible for determining if they + * caused an interrupt */ + /* and clearing their own interrupt flags */ + if(tmr0_isr != 0) { tmr0_isr(); } + if(tmr1_isr != 0) { tmr1_isr(); } + if(tmr2_isr != 0) { tmr2_isr(); } + if(tmr3_isr != 0) { tmr3_isr(); } + } + if(bit_is_set(pending, INT_NUM_MACA)) { + if(maca_isr != 0) { maca_isr(); } + } + if(bit_is_set(pending, INT_NUM_UART1)) { + if(uart1_isr != 0) { uart1_isr(); } + } + if(bit_is_set(pending, INT_NUM_CRM)) { + if(rtc_wu_evt() && (rtc_isr != 0)) { rtc_isr(); } + if(kbi_evnt(4) && (kbi4_isr != 0)) { kbi4_isr(); } + if(kbi_evnt(5) && (kbi5_isr != 0)) { kbi5_isr(); } + if(kbi_evnt(6) && (kbi6_isr != 0)) { kbi6_isr(); } + if(kbi_evnt(7) && (kbi7_isr != 0)) { kbi7_isr(); } + } + + *INTFRC = 0; /* stop forcing interrupts */ + + } +} diff --git a/cpu/mc1322x/src/start.S b/cpu/mc1322x/src/start.S new file mode 100644 index 000000000..439177ff0 --- /dev/null +++ b/cpu/mc1322x/src/start.S @@ -0,0 +1,182 @@ +/* + * Copyright (c) 2010, Mariano Alvira and other contributors + * to the MC1322x project (http://mc1322x.devl.org) and Contiki. + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki OS. + * + * $Id: start.S,v 1.1 2010/06/10 14:49:31 maralvira Exp $ + */ + + +/* +The following lincence is for all parts of this code done by +Martin Thomas. Code from others used here may have other license terms. + +Copyright (C) 2004 Martin THOMAS + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +! The above copyright notice and this permission notice shall be included in all +! copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + + .global main // int main(void) + + .global _etext // -> .data initial values in ROM + .global _data // -> .data area in RAM + .global _edata // end of .data area + .global __bss_start // -> .bss area in RAM + .global __bss_end__ // end of .bss area + .global _stack // top of stack + +// Stack Sizes + .set UND_STACK_SIZE, 0x00000004 + .set ABT_STACK_SIZE, 0x00000004 + .set FIQ_STACK_SIZE, 0x00000004 + .set IRQ_STACK_SIZE, 0X00000080 + .set SVC_STACK_SIZE, 0x00000004 + +// Standard definitions of Mode bits and Interrupt (I & F) flags in PSRs + .set MODE_USR, 0x10 // User Mode + .set MODE_FIQ, 0x11 // FIQ Mode + .set MODE_IRQ, 0x12 // IRQ Mode + .set MODE_SVC, 0x13 // Supervisor Mode + .set MODE_ABT, 0x17 // Abort Mode + .set MODE_UND, 0x1B // Undefined Mode + .set MODE_SYS, 0x1F // System Mode + + .equ I_BIT, 0x80 // when I bit is set, IRQ is disabled + .equ F_BIT, 0x40 // when F bit is set, FIQ is disabled + + .text + + .code 32 + .align 2 + + .set _rom_data_init, 0x108d0 + .global _start + .func _start + +_start: + b _begin // reset - _start + ldr pc,_undf // undefined + ldr pc,_swi // SWI + ldr pc,_pabt // program abort + ldr pc,_dabt // data abort + nop // reserved + ldr pc,_irq // IRQ + ldr pc,_fiq // FIQ + + /* these vectors are used for rom patching */ +.org 0x20 +.code 16 +_RPTV_0_START: + bx lr /* do nothing */ + +.org 0x60 +_RPTV_1_START: + bx lr /* do nothing */ + +.org 0xa0 +_RPTV_2_START: + bx lr /* do nothing */ + +.org 0xe0 +_RPTV_3_START: + bx lr /* do nothing */ + +.org 0x120 +ROM_var_start: .word 0 +.org 0x7ff +ROM_var_end: .word 0 + +.code 32 +.align +_begin: + /* FIQ mode stack */ + msr CPSR_c, #(MODE_FIQ | I_BIT | F_BIT) + ldr sp, =__fiq_stack_top__ /* set the FIQ stack pointer */ + + /* IRQ mode stack */ + msr CPSR_c, #(MODE_IRQ | I_BIT | F_BIT) + ldr sp, =__irq_stack_top__ /* set the IRQ stack pointer */ + + /* Supervisor mode stack */ + msr CPSR_c, #(MODE_SVC | I_BIT | F_BIT) + ldr sp, =__svc_stack_top__ /* set the SVC stack pointer */ + + /* Undefined mode stack */ + msr CPSR_c, #(MODE_UND | I_BIT | F_BIT) + ldr sp, =__und_stack_top__ /* set the UND stack pointer */ + + /* Abort mode stack */ + msr CPSR_c, #(MODE_ABT | I_BIT | F_BIT) + ldr sp, =__abt_stack_top__ /* set the ABT stack pointer */ + + /* System mode stack */ + msr CPSR_c, #(MODE_SYS | I_BIT | F_BIT) + ldr sp, =__sys_stack_top__ /* set the SYS stack pointer */ + + /* call the rom_data_init function in ROM */ + /* initializes ROM_var space defined by ROM_var_start and ROM_var_end */ + /* this area is used by ROM functions (e.g. nvm_read) */ + ldr r12,=_rom_data_init + mov lr,pc + bx r12 + + msr CPSR_c, #(MODE_SYS) + + b main + +_undf: .word __undf // undefined +_swi: .word __swi // SWI +_pabt: .word __pabt // program abort +_dabt: .word __dabt // data abort +_irq: .word irq // IRQ +_fiq: .word __fiq // FIQ + +__undf: b . // undefined +__swi: b . // SWI +__pabt: b . // program abort +__dabt: b . // data abort +/* IRQ handler set in isr.c */ +//__irq: b . // IRQ +__fiq: b . // FIQ