Changeset 8d26950 in rtems


Ignore:
Timestamp:
Jun 19, 2008, 6:27:29 AM (11 years ago)
Author:
Chris Johns <chrisj@…>
Branches:
4.10, 4.11, 4.9, master
Children:
6b56ec3
Parents:
d488f12b
Message:

2008-06-19 Matthew Riek <matthew.riek@…>

  • startup/cfinit.c, startup/init52235.c: Missed the last patch.
Location:
c/src/lib/libbsp/m68k/mcf52235
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • c/src/lib/libbsp/m68k/mcf52235/ChangeLog

    rd488f12b r8d26950  
     12008-06-19      Matthew Riek <matthew.riek@ibiscomputer.com.au>
     2
     3        * startup/cfinit.c, startup/init52235.c: Missed the last patch.
     4
    152008-06-19      Matthew Riek <matthew.riek@ibiscomputer.com.au>
    26
  • c/src/lib/libbsp/m68k/mcf52235/startup/cfinit.c

    rd488f12b r8d26950  
    1515/* Processor/internal bus clocked at 60.00 MHz */
    1616
    17 #include <mcf52235/mcf52235.h>
     17#include <bsp.h>
    1818
    1919/* Additional register read/write macros (missing in headers) */
     
    2727
    2828/* Function prototypes */
    29 void init_main (void);
    30 static void disable_interrupts (void);
    31 static void disable_watchdog_timer (void);
    32 static void init_ipsbar (void);
    33 static void init_clock_config (void);
    34 static void init_sram (void);
    35 static void init_flash_controller (void);
    36 static void init_eport (void);
    37 static void init_flexcan (void);
    38 static void init_bus_config (void);
    39 static void init_power_management (void);
    40 static void init_dma_timers (void);
    41 static void init_gp_timer (void);
    42 static void init_interrupt_timers (void);
    43 static void init_real_time_clock (void);
    44 static void init_watchdog_timer (void);
    45 static void init_pin_assignments (void);
    46 static void init_interrupt_controller (void);
     29void init_main(void);
     30static void disable_interrupts(void);
     31static void disable_watchdog_timer(void);
     32static void init_ipsbar(void);
     33static void init_clock_config(void);
     34static void init_sram(void);
     35static void init_flash_controller(void);
     36static void init_eport(void);
     37static void init_flexcan(void);
     38static void init_bus_config(void);
     39static void init_power_management(void);
     40static void init_dma_timers(void);
     41static void init_gp_timer(void);
     42static void init_interrupt_timers(void);
     43static void init_real_time_clock(void);
     44static void init_watchdog_timer(void);
     45static void init_pin_assignments(void);
     46static void init_interrupt_controller(void);
    4747
    4848/*********************************************************************
    4949* init_main - Main entry point for initialisation code               *
    5050**********************************************************************/
    51 void init_main (void)
    52 {
    53     /* Mask all interrupts */
    54     asm("move.w   #0x2700,%sr");
    55 
    56     /* Initialise base address of peripherals, VBR, etc */
    57     init_ipsbar ();
    58     init_clock_config ();
    59 
    60     /* Disable interrupts and watchdog timer */
    61     disable_interrupts ();
    62     disable_watchdog_timer ();
    63 
    64     /* Initialise individual modules */
    65     init_sram ();
    66     init_flash_controller ();
    67     init_eport ();
    68     init_flexcan ();
    69     init_bus_config ();
    70     init_power_management ();
    71     init_dma_timers ();
    72     init_gp_timer ();
    73     init_interrupt_timers ();
    74     init_real_time_clock ();
    75     init_watchdog_timer ();
    76     init_pin_assignments ();
    77 
    78     /* Initialise interrupt controller */
    79     init_interrupt_controller ();
     51void init_main(void)
     52{
     53  /* Mask all interrupts */
     54  asm("move.w   #0x2700,%sr");
     55
     56  /* Initialise base address of peripherals, VBR, etc */
     57  init_ipsbar();
     58  init_clock_config();
     59
     60  /* Disable interrupts and watchdog timer */
     61  disable_interrupts();
     62  disable_watchdog_timer();
     63
     64  /* Initialise individual modules */
     65  init_sram();
     66  init_flash_controller();
     67  init_eport();
     68  init_flexcan();
     69  init_bus_config();
     70  init_power_management();
     71  init_dma_timers();
     72  init_gp_timer();
     73  init_interrupt_timers();
     74  init_real_time_clock();
     75  init_watchdog_timer();
     76  init_pin_assignments();
     77
     78  /* Initialise interrupt controller */
     79  init_interrupt_controller();
    8080}
    8181
     
    8383* disable_interrupts - Disable all interrupt sources                 *
    8484**********************************************************************/
    85 static void disable_interrupts (void)
    86 {
    87     vuint8 *p;
    88     int    i;
    89 
    90     /* Set ICR008-ICR063 to 0x0 */
    91     p = (vuint8 *) &MCF_INTC0_ICR8;
    92     for (i = 8; i <= 63; i++)
    93         *p++ = 0x0;
    94 
    95     /* Set ICR108-ICR139 to 0x0 */
    96     p = (vuint8 *) &MCF_INTC1_ICR8;
    97     for (i = 108; i <= 139; i++)
    98         *p++ = 0x0;
     85static void disable_interrupts(void)
     86{
     87  vuint8 *p;
     88  int i;
     89
     90  /* Set ICR008-ICR063 to 0x0 */
     91  p = (vuint8 *) & MCF_INTC0_ICR8;
     92  for (i = 8; i <= 63; i++)
     93    *p++ = 0x0;
     94
     95  /* Set ICR108-ICR139 to 0x0 */
     96  p = (vuint8 *) & MCF_INTC1_ICR8;
     97  for (i = 108; i <= 139; i++)
     98    *p++ = 0x0;
    9999}
    100100
     
    102102* disable_watchdog_timer - Disable system watchdog timer             *
    103103**********************************************************************/
    104 static void disable_watchdog_timer (void)
    105 {
    106     /* Disable Core Watchdog Timer */
    107     MCF_SCM_CWCR = 0;
     104static void disable_watchdog_timer(void)
     105{
     106  /* Disable Core Watchdog Timer */
     107  MCF_SCM_CWCR = 0;
    108108}
    109109
     
    111111* init_clock_config - Clock Module                                   *
    112112**********************************************************************/
    113 static void init_clock_config (void)
    114 {
    115     /* Clock source is 25.0000 MHz external crystal
    116        Clock mode: Normal PLL mode
    117        Processor/Bus clock frequency = 60.00 MHz
    118        Loss of clock detection disabled
    119        Reset on loss of lock disabled
    120     */
    121 
    122     /* Divide 25.0000 MHz clock to get 5.00 MHz PLL input clock */
    123     MCF_CLOCK_CCHR = MCF_CLOCK_CCHR_PFD(0x4);
    124 
    125     /* Set RFD+1 to avoid frequency overshoot and wait for PLL to lock */
    126     MCF_CLOCK_SYNCR = 0x4103;
    127     while ((MCF_CLOCK_SYNSR & 0x08) == 0)
    128         ;
    129 
    130     /* Set desired RFD=0 and MFD=4 and wait for PLL to lock */
    131     MCF_CLOCK_SYNCR = 0x4003;
    132     while ((MCF_CLOCK_SYNSR & 0x08) == 0)
    133         ;
    134     MCF_CLOCK_SYNCR = 0x4007;                     /* Switch to using PLL */
     113static void init_clock_config(void)
     114{
     115  /* Clock source is 25.0000 MHz external crystal
     116     Clock mode: Normal PLL mode
     117     Processor/Bus clock frequency = 60.00 MHz
     118     Loss of clock detection disabled
     119     Reset on loss of lock disabled
     120   */
     121
     122  /* Divide 25.0000 MHz clock to get 5.00 MHz PLL input clock */
     123  MCF_CLOCK_CCHR = MCF_CLOCK_CCHR_PFD(0x4);
     124
     125  /* Set RFD+1 to avoid frequency overshoot and wait for PLL to lock */
     126  MCF_CLOCK_SYNCR = 0x4103;
     127  while ((MCF_CLOCK_SYNSR & 0x08) == 0) ;
     128
     129  /* Set desired RFD=0 and MFD=4 and wait for PLL to lock */
     130  MCF_CLOCK_SYNCR = 0x4003;
     131  while ((MCF_CLOCK_SYNSR & 0x08) == 0) ;
     132  MCF_CLOCK_SYNCR = 0x4007;                       /* Switch to using PLL */
    135133}
    136134
     
    138136* init_ipsbar - Internal Peripheral System Base Address (IPSBAR)     *
    139137**********************************************************************/
    140 static void init_ipsbar (void)
    141 {
    142     /* Base address of internal peripherals (IPSBAR) = 0x40000000
    143          
    144        Note: Processor powers up with IPS base address = 0x40000000
    145              Write to IPS base + 0x00000000 to set new value
    146     */
    147     * (vuint32 *) 0x40000000 = (vuint32) __IPSBAR + 1; /* +1 for Enable */
     138static void init_ipsbar(void)
     139{
     140  /* Base address of internal peripherals (IPSBAR) = 0x40000000
     141
     142     Note: Processor powers up with IPS base address = 0x40000000
     143     Write to IPS base + 0x00000000 to set new value
     144   */
     145  *(vuint32 *) 0x40000000 = (vuint32) __IPSBAR + 1;    /* +1 for Enable */
    148146}
    149147
     
    151149* init_flash_controller - Flash Module                               *
    152150**********************************************************************/
    153 static void init_flash_controller (void)
    154 {
    155     /* Internal Flash module enabled, address = $00000000
    156        Flash state machine clock = 197.37 kHz
    157        All access types except CPU space/interrupt acknowledge cycle allowed
    158        Flash is Write-Protected
    159        All interrupts disabled
    160     */
    161     MCF_CFM_CFMCLKD = MCF_CFM_CFMCLKD_PRDIV8 |
    162                       MCF_CFM_CFMCLKD_DIV(0x12);
    163     MCF_CFM_CFMMCR = 0;
    164 
    165     /* WARNING: Setting FLASHBAR[6]=1 in order to turn off address speculation
    166        This is a workaround for a hardware problem whereby a speculative
    167        access to the Flash occuring at the same time as an SRAM access
    168        can return corrupt data.
    169          
    170        This workaround can result in a 4% - 9% performance penalty. Other workarounds
    171        are possible for certain applications.
    172          
    173        For example, if you know that you will not be using the top 32 KB of the Flash 
    174        you can place the SRAM base address at 0x20038000
    175          
    176        See Device Errata for further details
    177     */
    178     asm("move.l   #0x00000161,%d0");
    179     asm("movec    %d0,%FLASHBAR");
     151static void init_flash_controller(void)
     152{
     153  /* Internal Flash module enabled, address = $00000000
     154     Flash state machine clock = 197.37 kHz
     155     All access types except CPU space/interrupt acknowledge cycle allowed
     156     Flash is Write-Protected
     157     All interrupts disabled
     158   */
     159  MCF_CFM_CFMCLKD = MCF_CFM_CFMCLKD_PRDIV8 | MCF_CFM_CFMCLKD_DIV(0x12);
     160  MCF_CFM_CFMMCR = 0;
     161
     162  /* WARNING: Setting FLASHBAR[6]=1 in order to turn off address speculation
     163     This is a workaround for a hardware problem whereby a speculative
     164     access to the Flash occuring at the same time as an SRAM access
     165     can return corrupt data.
     166
     167     This workaround can result in a 4% - 9% performance penalty. Other workarounds
     168     are possible for certain applications.
     169
     170     For example, if you know that you will not be using the top 32 KB of the Flash 
     171     you can place the SRAM base address at 0x20038000
     172
     173     See Device Errata for further details
     174   */
     175  asm("move.l   #0x00000161,%d0");
     176  asm("movec    %d0,%FLASHBAR");
    180177}
    181178
     
    183180* init_eport - Edge Port Module (EPORT)                              *
    184181**********************************************************************/
    185 static void init_eport (void)
    186 {
    187     /* Pins 1-15 configured as GPIO inputs */
    188     MCF_EPORT_EPDDR0 = 0;
    189     MCF_EPORT_EPDDR1 = 0;
    190     MCF_EPORT_EPPAR0 = 0;
    191     MCF_EPORT_EPPAR1 = 0;
    192     MCF_EPORT_EPIER0 = 0;
    193     MCF_EPORT_EPIER1 = 0;
     182static void init_eport(void)
     183{
     184  /* Pins 1-15 configured as GPIO inputs */
     185  MCF_EPORT_EPDDR0 = 0;
     186  MCF_EPORT_EPDDR1 = 0;
     187  MCF_EPORT_EPPAR0 = 0;
     188  MCF_EPORT_EPPAR1 = 0;
     189  MCF_EPORT_EPIER0 = 0;
     190  MCF_EPORT_EPIER1 = 0;
    194191}
    195192
     
    197194* init_flexcan - FlexCAN Module                                      *
    198195**********************************************************************/
    199 static void init_flexcan (void)
    200 {
    201     /* FlexCAN controller disabled (CANMCR0[MDIS]=1) */
    202     MCF_CAN_IMASK = 0;
    203     MCF_CAN_RXGMASK = MCF_CAN_RXGMASK_MI(0x1fffffff);
    204     MCF_CAN_RX14MASK = MCF_CAN_RX14MASK_MI(0x1fffffff);
    205     MCF_CAN_RX15MASK = MCF_CAN_RX15MASK_MI(0x1fffffff);
    206     MCF_CAN_CANCTRL = 0;
    207     MCF_CAN_CANMCR = MCF_CAN_CANMCR_MDIS       |
    208                      MCF_CAN_CANMCR_FRZ        |
    209                      MCF_CAN_CANMCR_HALT       |
    210                      MCF_CAN_CANMCR_SUPV       |
    211                      MCF_CAN_CANMCR_MAXMB(0xf);
     196static void init_flexcan(void)
     197{
     198  /* FlexCAN controller disabled (CANMCR0[MDIS]=1) */
     199  MCF_CAN_IMASK = 0;
     200  MCF_CAN_RXGMASK = MCF_CAN_RXGMASK_MI(0x1fffffff);
     201  MCF_CAN_RX14MASK = MCF_CAN_RX14MASK_MI(0x1fffffff);
     202  MCF_CAN_RX15MASK = MCF_CAN_RX15MASK_MI(0x1fffffff);
     203  MCF_CAN_CANCTRL = 0;
     204  MCF_CAN_CANMCR = MCF_CAN_CANMCR_MDIS |
     205    MCF_CAN_CANMCR_FRZ |
     206    MCF_CAN_CANMCR_HALT | MCF_CAN_CANMCR_SUPV | MCF_CAN_CANMCR_MAXMB(0xf);
    212207}
    213208
     
    215210* init_bus_config - Internal Bus Arbitration                         *
    216211**********************************************************************/
    217 static void init_bus_config (void)
    218 {
    219     /* Use round robin arbitration scheme
    220        Assigned priorities (highest first):
    221            Ethernet
    222            DMA Controller
    223            ColdFire Core
    224        DMA bandwidth control disabled
    225        Park on last active bus master
    226     */
    227     MCF_SCM_MPARK = MCF_SCM_MPARK_M3PRTY(0x3) |
    228                     MCF_SCM_MPARK_M2PRTY(0x2) |
    229                     (0x1 << 16);
     212static void init_bus_config(void)
     213{
     214  /* Use round robin arbitration scheme
     215     Assigned priorities (highest first):
     216     Ethernet
     217     DMA Controller
     218     ColdFire Core
     219     DMA bandwidth control disabled
     220     Park on last active bus master
     221   */
     222  MCF_SCM_MPARK = MCF_SCM_MPARK_M3PRTY(0x3) |
     223    MCF_SCM_MPARK_M2PRTY(0x2) | (0x1 << 16);
    230224}
    231225
     
    233227* init_sram - On-chip SRAM                                           *
    234228**********************************************************************/
    235 static void init_sram (void)
    236 {
    237     /* Internal SRAM module enabled, address = $20000000
    238        DMA access to SRAM block disabled
    239        All access types (supervisor and user) allowed
    240     */
    241     asm("move.l   #0x20000001,%d0");
    242     asm("movec    %d0,%RAMBAR");
     229static void init_sram(void)
     230{
     231  /* Internal SRAM module enabled, address = $20000000
     232     DMA access to SRAM block disabled
     233     All access types (supervisor and user) allowed
     234   */
     235  asm("move.l   #0x20000001,%d0");
     236  asm("movec    %d0,%RAMBAR");
    243237}
    244238
     
    246240* init_power_management - Power Management                           *
    247241**********************************************************************/
    248 static void init_power_management (void)
    249 {
    250     /* On executing STOP instruction, processor enters RUN mode
    251        Mode is exited when an interrupt of level 1 or higher is received
    252     */
    253     MCF_PMM_LPICR = MCF_PMM_LPICR_ENBSTOP;
    254     MCF_PMM_LPCR = MCF_PMM_LPCR_LPMD_RUN;
     242static void init_power_management(void)
     243{
     244  /* On executing STOP instruction, processor enters RUN mode
     245     Mode is exited when an interrupt of level 1 or higher is received
     246   */
     247  MCF_PMM_LPICR = MCF_PMM_LPICR_ENBSTOP;
     248  MCF_PMM_LPCR = MCF_PMM_LPCR_LPMD_RUN;
    255249}
    256250
     
    258252* init_dma_timers - DMA Timer Modules                                *
    259253**********************************************************************/
    260 static void init_dma_timers (void)
    261 {
    262     /* DMA Timer 0 disabled (DTMR0[RST] = 0) */
    263     MCF_DTIM0_DTMR = MCF_DTIM_DTMR_CLK(0x1);
    264     MCF_DTIM0_DTXMR = 0;
    265     MCF_DTIM0_DTRR = MCF_DTIM_DTRR_REF(0xffffffff);
    266 
    267     /* DMA Timer 1 disabled (DTMR1[RST] = 0) */
    268     MCF_DTIM1_DTMR = 0;
    269     MCF_DTIM1_DTXMR = 0;
    270     MCF_DTIM1_DTRR = MCF_DTIM_DTRR_REF(0xffffffff);
    271 
    272     /* DMA Timer 2 disabled (DTMR2[RST] = 0) */
    273     MCF_DTIM2_DTMR = 0;
    274     MCF_DTIM2_DTXMR = 0;
    275     MCF_DTIM2_DTRR = MCF_DTIM_DTRR_REF(0xffffffff);
    276 
    277     /* DMA Timer 3 disabled (DTMR3[RST] = 0) */
    278     MCF_DTIM3_DTMR = MCF_DTIM_DTMR_CLK(0x1);
    279     MCF_DTIM3_DTXMR = 0;
    280     MCF_DTIM3_DTRR = MCF_DTIM_DTRR_REF(0xffffffff);
     254static void init_dma_timers(void)
     255{
     256  /* DMA Timer 0 disabled (DTMR0[RST] = 0) */
     257  MCF_DTIM0_DTMR = MCF_DTIM_DTMR_CLK(0x1);
     258  MCF_DTIM0_DTXMR = 0;
     259  MCF_DTIM0_DTRR = MCF_DTIM_DTRR_REF(0xffffffff);
     260
     261  /* DMA Timer 1 disabled (DTMR1[RST] = 0) */
     262  MCF_DTIM1_DTMR = 0;
     263  MCF_DTIM1_DTXMR = 0;
     264  MCF_DTIM1_DTRR = MCF_DTIM_DTRR_REF(0xffffffff);
     265
     266  /* DMA Timer 2 disabled (DTMR2[RST] = 0) */
     267  MCF_DTIM2_DTMR = 0;
     268  MCF_DTIM2_DTXMR = 0;
     269  MCF_DTIM2_DTRR = MCF_DTIM_DTRR_REF(0xffffffff);
     270
     271  /* DMA Timer 3 disabled (DTMR3[RST] = 0) */
     272  MCF_DTIM3_DTMR = MCF_DTIM_DTMR_CLK(0x1);
     273  MCF_DTIM3_DTXMR = 0;
     274  MCF_DTIM3_DTRR = MCF_DTIM_DTRR_REF(0xffffffff);
    281275}
    282276
     
    284278* init_gp_timer - General Purpose Timer (GPT) Module                 *
    285279**********************************************************************/
    286 static void init_gp_timer (void)
    287 {
    288     /*   
    289        GPT disabled (GPTASCR1[GPTEN] = 0)
    290        Channel 0 configured as GPIO input
    291        Channel 1 configured as GPIO input
    292        Channel 2 configured as GPIO input
    293        Channel 3 configured as GPIO input
    294     */
    295     MCF_GPT_GPTSCR1 = 0;
    296     MCF_GPT_GPTDDR = 0;
     280static void init_gp_timer(void)
     281{
     282  /*   
     283     GPT disabled (GPTASCR1[GPTEN] = 0)
     284     Channel 0 configured as GPIO input
     285     Channel 1 configured as GPIO input
     286     Channel 2 configured as GPIO input
     287     Channel 3 configured as GPIO input
     288   */
     289  MCF_GPT_GPTSCR1 = 0;
     290  MCF_GPT_GPTDDR = 0;
    297291}
    298292
     
    300294* init_interrupt_timers - Programmable Interrupt Timer (PIT) Modules  *
    301295***********************************************************************/
    302 static void init_interrupt_timers (void)
    303 {
    304     /* PIT0 disabled (PCSR0[EN]=0) */
    305     MCF_PIT0_PCSR = 0;
    306 
    307     /* PIT1 disabled (PCSR1[EN]=0) */
    308     MCF_PIT1_PCSR = 0;
     296static void init_interrupt_timers(void)
     297{
     298  /* PIT0 disabled (PCSR0[EN]=0) */
     299  MCF_PIT0_PCSR = 0;
     300
     301  /* PIT1 disabled (PCSR1[EN]=0) */
     302  MCF_PIT1_PCSR = 0;
    309303}
    310304
     
    312306* init_real_time_clock - Real-Time Clock (RTC)                       *
    313307**********************************************************************/
    314 static void init_real_time_clock (void)
    315 {
    316     /* Disable the RTC */
    317     MCF_RTC_CR = 0;
     308static void init_real_time_clock(void)
     309{
     310  /* Disable the RTC */
     311  MCF_RTC_CR = 0;
    318312}
    319313
     
    321315* init_watchdog_timer - Watchdog Timer                               *
    322316**********************************************************************/
    323 static void init_watchdog_timer (void)
    324 {
    325     /* Core Watchdog Timer disabled (CWCR[CWE]=0) */
    326     MCF_SCM_CWCR = 0;
     317static void init_watchdog_timer(void)
     318{
     319  /* Core Watchdog Timer disabled (CWCR[CWE]=0) */
     320  MCF_SCM_CWCR = 0;
    327321}
    328322
     
    330324* init_interrupt_controller - Interrupt Controller                   *
    331325**********************************************************************/
    332 static void init_interrupt_controller (void)
    333 {
    334     /* Configured interrupt sources in order of priority...
    335        Level 7:  External interrupt /IRQ7, (initially masked)
    336        Level 6:  External interrupt /IRQ6, (initially masked)
    337        Level 5:  External interrupt /IRQ5, (initially masked)
    338        Level 4:  External interrupt /IRQ4, (initially masked)
    339        Level 3:  External interrupt /IRQ3, (initially masked)
    340        Level 2:  External interrupt /IRQ2, (initially masked)
    341        Level 1:  External interrupt /IRQ1, (initially masked)
    342     */
    343     MCF_INTC0_ICR1 = 0;
    344     MCF_INTC0_ICR2 = 0;
    345     MCF_INTC0_ICR3 = 0;
    346     MCF_INTC0_ICR4 = 0;
    347     MCF_INTC0_ICR5 = 0;
    348     MCF_INTC0_ICR6 = 0;
    349     MCF_INTC0_ICR7 = 0;
    350     MCF_INTC0_ICR8 = 0;
    351     MCF_INTC0_ICR9 = 0;
    352     MCF_INTC0_ICR10 = 0;
    353     MCF_INTC0_ICR11 = 0;
    354     MCF_INTC0_ICR12 = 0;
    355     MCF_INTC0_ICR13 = 0;
    356     MCF_INTC0_ICR14 = 0;
    357     MCF_INTC0_ICR15 = 0;
    358     MCF_INTC0_ICR17 = 0;
    359     MCF_INTC0_ICR18 = 0;
    360     MCF_INTC0_ICR19 = 0;
    361     MCF_INTC0_ICR20 = 0;
    362     MCF_INTC0_ICR21 = 0;
    363     MCF_INTC0_ICR22 = 0;
    364     MCF_INTC0_ICR23 = 0;
    365     MCF_INTC0_ICR24 = 0;
    366     MCF_INTC0_ICR25 = 0;
    367     MCF_INTC0_ICR26 = 0;
    368     MCF_INTC0_ICR27 = 0;
    369     MCF_INTC0_ICR28 = 0;
    370     MCF_INTC0_ICR29 = 0;
    371     MCF_INTC0_ICR30 = 0;
    372     MCF_INTC0_ICR31 = 0;
    373     MCF_INTC0_ICR32 = 0;
    374     MCF_INTC0_ICR33 = 0;
    375     MCF_INTC0_ICR34 = 0;
    376     MCF_INTC0_ICR35 = 0;
    377     MCF_INTC0_ICR36 = 0;
    378     MCF_INTC0_ICR41 = 0;
    379     MCF_INTC0_ICR42 = 0;
    380     MCF_INTC0_ICR43 = 0;
    381     MCF_INTC0_ICR44 = 0;
    382     MCF_INTC0_ICR45 = 0;
    383     MCF_INTC0_ICR46 = 0;
    384     MCF_INTC0_ICR47 = 0;
    385     MCF_INTC0_ICR48 = 0;
    386     MCF_INTC0_ICR49 = 0;
    387     MCF_INTC0_ICR50 = 0;
    388     MCF_INTC0_ICR51 = 0;
    389     MCF_INTC0_ICR52 = 0;
    390     MCF_INTC0_ICR53 = 0;
    391     MCF_INTC0_ICR55 = 0;
    392     MCF_INTC0_ICR56 = 0;
    393     MCF_INTC0_ICR59 = 0;
    394     MCF_INTC0_ICR60 = 0;
    395     MCF_INTC0_ICR61 = 0;
    396     MCF_INTC0_ICR62 = 0;
    397     MCF_INTC0_ICR63 = 0;
    398     MCF_INTC1_ICR8 = 0;
    399     MCF_INTC1_ICR9 = 0;
    400     MCF_INTC1_ICR10 = 0;
    401     MCF_INTC1_ICR11 = 0;
    402     MCF_INTC1_ICR12 = 0;
    403     MCF_INTC1_ICR13 = 0;
    404     MCF_INTC1_ICR14 = 0;
    405     MCF_INTC1_ICR15 = 0;
    406     MCF_INTC1_ICR16 = 0;
    407     MCF_INTC1_ICR17 = 0;
    408     MCF_INTC1_ICR18 = 0;
    409     MCF_INTC1_ICR19 = 0;
    410     MCF_INTC1_ICR20 = 0;
    411     MCF_INTC1_ICR21 = 0;
    412     MCF_INTC1_ICR22 = 0;
    413     MCF_INTC1_ICR23 = 0;
    414     MCF_INTC1_ICR24 = 0;
    415     MCF_INTC1_ICR25 = 0;
    416     MCF_INTC1_ICR32 = 0;
    417     MCF_INTC1_ICR33 = 0;
    418     MCF_INTC1_ICR34 = 0;
    419     MCF_INTC1_ICR35 = 0;
    420     MCF_INTC1_ICR36 = 0;
    421     MCF_INTC1_ICR37 = 0;
    422     MCF_INTC1_ICR38 = 0;
    423     MCF_INTC1_ICR39 = 0;
    424     MCF_INTC0_IMRH = 0xffffffff;
    425     MCF_INTC0_IMRL = 0xfffffffe;
    426     MCF_INTC1_IMRH = 0xffffffff;
    427     MCF_INTC1_IMRL = 0xfffffffe;
     326static void init_interrupt_controller(void)
     327{
     328  /* Configured interrupt sources in order of priority...
     329     Level 7:  External interrupt /IRQ7, (initially masked)
     330     Level 6:  External interrupt /IRQ6, (initially masked)
     331     Level 5:  External interrupt /IRQ5, (initially masked)
     332     Level 4:  External interrupt /IRQ4, (initially masked)
     333     Level 3:  External interrupt /IRQ3, (initially masked)
     334     Level 2:  External interrupt /IRQ2, (initially masked)
     335     Level 1:  External interrupt /IRQ1, (initially masked)
     336   */
     337  MCF_INTC0_ICR1 = 0;
     338  MCF_INTC0_ICR2 = 0;
     339  MCF_INTC0_ICR3 = 0;
     340  MCF_INTC0_ICR4 = 0;
     341  MCF_INTC0_ICR5 = 0;
     342  MCF_INTC0_ICR6 = 0;
     343  MCF_INTC0_ICR7 = 0;
     344  MCF_INTC0_ICR8 = 0;
     345  MCF_INTC0_ICR9 = 0;
     346  MCF_INTC0_ICR10 = 0;
     347  MCF_INTC0_ICR11 = 0;
     348  MCF_INTC0_ICR12 = 0;
     349  MCF_INTC0_ICR13 = 0;
     350  MCF_INTC0_ICR14 = 0;
     351  MCF_INTC0_ICR15 = 0;
     352  MCF_INTC0_ICR17 = 0;
     353  MCF_INTC0_ICR18 = 0;
     354  MCF_INTC0_ICR19 = 0;
     355  MCF_INTC0_ICR20 = 0;
     356  MCF_INTC0_ICR21 = 0;
     357  MCF_INTC0_ICR22 = 0;
     358  MCF_INTC0_ICR23 = 0;
     359  MCF_INTC0_ICR24 = 0;
     360  MCF_INTC0_ICR25 = 0;
     361  MCF_INTC0_ICR26 = 0;
     362  MCF_INTC0_ICR27 = 0;
     363  MCF_INTC0_ICR28 = 0;
     364  MCF_INTC0_ICR29 = 0;
     365  MCF_INTC0_ICR30 = 0;
     366  MCF_INTC0_ICR31 = 0;
     367  MCF_INTC0_ICR32 = 0;
     368  MCF_INTC0_ICR33 = 0;
     369  MCF_INTC0_ICR34 = 0;
     370  MCF_INTC0_ICR35 = 0;
     371  MCF_INTC0_ICR36 = 0;
     372  MCF_INTC0_ICR41 = 0;
     373  MCF_INTC0_ICR42 = 0;
     374  MCF_INTC0_ICR43 = 0;
     375  MCF_INTC0_ICR44 = 0;
     376  MCF_INTC0_ICR45 = 0;
     377  MCF_INTC0_ICR46 = 0;
     378  MCF_INTC0_ICR47 = 0;
     379  MCF_INTC0_ICR48 = 0;
     380  MCF_INTC0_ICR49 = 0;
     381  MCF_INTC0_ICR50 = 0;
     382  MCF_INTC0_ICR51 = 0;
     383  MCF_INTC0_ICR52 = 0;
     384  MCF_INTC0_ICR53 = 0;
     385  MCF_INTC0_ICR55 = 0;
     386  MCF_INTC0_ICR56 = 0;
     387  MCF_INTC0_ICR59 = 0;
     388  MCF_INTC0_ICR60 = 0;
     389  MCF_INTC0_ICR61 = 0;
     390  MCF_INTC0_ICR62 = 0;
     391  MCF_INTC0_ICR63 = 0;
     392  MCF_INTC1_ICR8 = 0;
     393  MCF_INTC1_ICR9 = 0;
     394  MCF_INTC1_ICR10 = 0;
     395  MCF_INTC1_ICR11 = 0;
     396  MCF_INTC1_ICR12 = 0;
     397  MCF_INTC1_ICR13 = 0;
     398  MCF_INTC1_ICR14 = 0;
     399  MCF_INTC1_ICR15 = 0;
     400  MCF_INTC1_ICR16 = 0;
     401  MCF_INTC1_ICR17 = 0;
     402  MCF_INTC1_ICR18 = 0;
     403  MCF_INTC1_ICR19 = 0;
     404  MCF_INTC1_ICR20 = 0;
     405  MCF_INTC1_ICR21 = 0;
     406  MCF_INTC1_ICR22 = 0;
     407  MCF_INTC1_ICR23 = 0;
     408  MCF_INTC1_ICR24 = 0;
     409  MCF_INTC1_ICR25 = 0;
     410  MCF_INTC1_ICR32 = 0;
     411  MCF_INTC1_ICR33 = 0;
     412  MCF_INTC1_ICR34 = 0;
     413  MCF_INTC1_ICR35 = 0;
     414  MCF_INTC1_ICR36 = 0;
     415  MCF_INTC1_ICR37 = 0;
     416  MCF_INTC1_ICR38 = 0;
     417  MCF_INTC1_ICR39 = 0;
     418  MCF_INTC0_IMRH = 0xffffffff;
     419  MCF_INTC0_IMRL = 0xfffffffe;
     420  MCF_INTC1_IMRH = 0xffffffff;
     421  MCF_INTC1_IMRL = 0xfffffffe;
    428422}
    429423
     
    431425* init_pin_assignments - Pin Assignment and General Purpose I/O      *
    432426**********************************************************************/
    433 static void init_pin_assignments (void)
    434 {
    435     /* Pin assignments for port NQ
    436            Pins NQ7-NQ1 : EdgePort GPIO/IRQ
    437     */
    438     MCF_GPIO_DDRNQ = 0;
    439     MCF_GPIO_PNQPAR = MCF_GPIO_PNQPAR_PNQPAR7(0x1) |
    440                       MCF_GPIO_PNQPAR_PNQPAR6(0x1) |
    441                       MCF_GPIO_PNQPAR_PNQPAR5(0x1) |
    442                       MCF_GPIO_PNQPAR_PNQPAR4(0x1) |
    443                       MCF_GPIO_PNQPAR_PNQPAR3(0x1) |
    444                       MCF_GPIO_PNQPAR_PNQPAR2(0x1) |
    445                       MCF_GPIO_PNQPAR_PNQPAR1(0x1);
    446 
    447     /* Pin assignments for port GP
    448            Pins PG7-PG0 : EdgePort GPIO/IRQ
    449     */
    450     MCF_GPIO_DDRGP = 0;
    451     MCF_GPIO_PGPPAR = MCF_GPIO_PGPPAR_PGPPAR7 |
    452                       MCF_GPIO_PGPPAR_PGPPAR6 |
    453                       MCF_GPIO_PGPPAR_PGPPAR5 |
    454                       MCF_GPIO_PGPPAR_PGPPAR4 |
    455                       MCF_GPIO_PGPPAR_PGPPAR3 |
    456                       MCF_GPIO_PGPPAR_PGPPAR2 |
    457                       MCF_GPIO_PGPPAR_PGPPAR1 |
    458                       MCF_GPIO_PGPPAR_PGPPAR0;
    459 
    460     /* Pin assignments for port DD
    461            Pin DD7 : DDATA[3]
    462            Pin DD6 : DDATA[2]
    463            Pin DD5 : DDATA[1]
    464            Pin DD4 : DDATA[0]
    465            Pin DD3 : PST[3]
    466            Pin DD2 : PST[2]
    467            Pin DD1 : PST[1]
    468            Pin DD0 : PST[0]
    469        CCON[PSTEN] = 1 to enable PST/DDATA function
    470     */
    471     MCF_GPIO_DDRDD = 0;
    472     MCF_GPIO_PDDPAR = MCF_GPIO_PDDPAR_PDDPAR7 |
    473                       MCF_GPIO_PDDPAR_PDDPAR6 |
    474                       MCF_GPIO_PDDPAR_PDDPAR5 |
    475                       MCF_GPIO_PDDPAR_PDDPAR4 |
    476                       MCF_GPIO_PDDPAR_PDDPAR3 |
    477                       MCF_GPIO_PDDPAR_PDDPAR2 |
    478                       MCF_GPIO_PDDPAR_PDDPAR1 |
    479                       MCF_GPIO_PDDPAR_PDDPAR0;
    480     MCF_CIM_CCON = 0x0021;
    481 
    482     /* Pin assignments for port AN
    483            Pins are all GPIO inputs
    484     */
    485     MCF_GPIO_DDRAN = 0;
    486     MCF_GPIO_PANPAR = 0;
    487 
    488     /* Pin assignments for port AS
    489            Pins are all GPIO inputs
    490     */
    491     MCF_GPIO_DDRAS = 0;
    492     MCF_GPIO_PASPAR = 0;
    493 
    494     /* Pin assignments for port LD
    495            Pins are all GPIO inputs
    496     */
    497     MCF_GPIO_DDRLD = 0;
    498     MCF_GPIO_PLDPAR = 0;
    499 
    500     /* Pin assignments for port QS
    501            Pins are all GPIO inputs
    502     */
    503     MCF_GPIO_DDRQS = 0;
    504     MCF_GPIO_PQSPAR = 0;
    505 
    506     /* Pin assignments for port TA
    507            Pins are all GPIO inputs
    508     */
    509     MCF_GPIO_DDRTA = 0;
    510     MCF_GPIO_PTAPAR = 0;
    511 
    512     /* Pin assignments for port TC
    513            Pins are all GPIO inputs
    514     */
    515     MCF_GPIO_DDRTC = 0;
    516     MCF_GPIO_PTCPAR = 0;
    517 
    518     /* Pin assignments for port TD
    519            Pins are all GPIO inputs
    520     */
    521     MCF_GPIO_DDRTD = 0;
    522     MCF_GPIO_PTDPAR = 0;
    523 
    524     /* Pin assignments for port UA
    525            Pin UA3 : UART 0 clear-to-send, UCTS0
    526            Pin UA2 : UART 0 request-to-send, URTS0
    527            Pin UA1 : UART 0 receive data, URXD0
    528            Pin UA0 : UART 0 transmit data, UTXD0
    529     */
    530     MCF_GPIO_DDRUA = 0;
    531     MCF_GPIO_PUAPAR = MCF_GPIO_PUAPAR_PUAPAR3(0x1) |
    532                       MCF_GPIO_PUAPAR_PUAPAR2(0x1) |
    533                       MCF_GPIO_PUAPAR_PUAPAR1(0x1) |
    534                       MCF_GPIO_PUAPAR_PUAPAR0(0x1);
    535 
    536     /* Pin assignments for port UB
    537            Pin UB3 : UART 1 clear-to-send, UCTS1
    538            Pin UB2 : UART 1 request-to-send, URTS1
    539            Pin UB1 : UART 1 receive data, URXD1
    540            Pin UB0 : UART 1 transmit data, UTXD1
    541     */
    542     MCF_GPIO_DDRUB = 0;
    543     MCF_GPIO_PUBPAR = MCF_GPIO_PUBPAR_PUBPAR3(0x1) |
    544                       MCF_GPIO_PUBPAR_PUBPAR2(0x1) |
    545                       MCF_GPIO_PUBPAR_PUBPAR1(0x1) |
    546                       MCF_GPIO_PUBPAR_PUBPAR0(0x1);
    547 
    548     /* Pin assignments for port UC
    549            Pin UC3 : UART 2 clear-to-send, UCTS2
    550            Pin UC2 : UART 2 request-to-send, URTS2
    551            Pin UC1 : UART 2 receive data, URXD2
    552            Pin UC0 : UART 2 transmit data, UTXD2
    553     */
    554     MCF_GPIO_DDRUC = 0;
    555     MCF_GPIO_PUCPAR = MCF_GPIO_PUCPAR_PUCPAR3 |
    556                       MCF_GPIO_PUCPAR_PUCPAR2 |
    557                       MCF_GPIO_PUCPAR_PUCPAR1 |
    558                       MCF_GPIO_PUCPAR_PUCPAR0;
    559 
    560     /* Configure drive strengths */
    561     MCF_GPIO_PDSRH = 0;
    562     MCF_GPIO_PDSRL = 0;
    563 
    564     /* Configure Wired-OR register */
    565     MCF_GPIO_PWOR = 0;
    566 }
     427static void init_pin_assignments(void)
     428{
     429  /* Pin assignments for port NQ
     430     Pins NQ7-NQ1 : EdgePort GPIO/IRQ
     431   */
     432  MCF_GPIO_DDRNQ = 0;
     433  MCF_GPIO_PNQPAR = MCF_GPIO_PNQPAR_PNQPAR7(0x1) |
     434    MCF_GPIO_PNQPAR_PNQPAR6(0x1) |
     435    MCF_GPIO_PNQPAR_PNQPAR5(0x1) |
     436    MCF_GPIO_PNQPAR_PNQPAR4(0x1) |
     437    MCF_GPIO_PNQPAR_PNQPAR3(0x1) |
     438    MCF_GPIO_PNQPAR_PNQPAR2(0x1) | MCF_GPIO_PNQPAR_PNQPAR1(0x1);
     439
     440  /* Pin assignments for port GP
     441     Pins PG7-PG0 : EdgePort GPIO/IRQ
     442   */
     443  MCF_GPIO_DDRGP = 0;
     444  MCF_GPIO_PGPPAR = MCF_GPIO_PGPPAR_PGPPAR7 |
     445    MCF_GPIO_PGPPAR_PGPPAR6 |
     446    MCF_GPIO_PGPPAR_PGPPAR5 |
     447    MCF_GPIO_PGPPAR_PGPPAR4 |
     448    MCF_GPIO_PGPPAR_PGPPAR3 |
     449    MCF_GPIO_PGPPAR_PGPPAR2 |
     450    MCF_GPIO_PGPPAR_PGPPAR1 | MCF_GPIO_PGPPAR_PGPPAR0;
     451
     452  /* Pin assignments for port DD
     453     Pin DD7 : DDATA[3]
     454     Pin DD6 : DDATA[2]
     455     Pin DD5 : DDATA[1]
     456     Pin DD4 : DDATA[0]
     457     Pin DD3 : PST[3]
     458     Pin DD2 : PST[2]
     459     Pin DD1 : PST[1]
     460     Pin DD0 : PST[0]
     461     CCON[PSTEN] = 1 to enable PST/DDATA function
     462   */
     463  MCF_GPIO_DDRDD = 0;
     464  MCF_GPIO_PDDPAR = MCF_GPIO_PDDPAR_PDDPAR7 |
     465    MCF_GPIO_PDDPAR_PDDPAR6 |
     466    MCF_GPIO_PDDPAR_PDDPAR5 |
     467    MCF_GPIO_PDDPAR_PDDPAR4 |
     468    MCF_GPIO_PDDPAR_PDDPAR3 |
     469    MCF_GPIO_PDDPAR_PDDPAR2 |
     470    MCF_GPIO_PDDPAR_PDDPAR1 | MCF_GPIO_PDDPAR_PDDPAR0;
     471  MCF_CIM_CCON = 0x0021;
     472
     473  /* Pin assignments for port AN
     474     Pins are all GPIO inputs
     475   */
     476  MCF_GPIO_DDRAN = 0;
     477  MCF_GPIO_PANPAR = 0;
     478
     479  /* Pin assignments for port AS
     480     Pins are all GPIO inputs
     481   */
     482  MCF_GPIO_DDRAS = 0;
     483  MCF_GPIO_PASPAR = 0;
     484
     485  /* Pin assignments for port LD
     486     Pins are all GPIO inputs
     487   */
     488  MCF_GPIO_DDRLD = 0;
     489  MCF_GPIO_PLDPAR = 0;
     490
     491  /* Pin assignments for port QS
     492     Pins are all GPIO inputs
     493   */
     494  MCF_GPIO_DDRQS = 0;
     495  MCF_GPIO_PQSPAR = 0;
     496
     497  /* Pin assignments for port TA
     498     Pins are all GPIO inputs
     499   */
     500  MCF_GPIO_DDRTA = 0;
     501  MCF_GPIO_PTAPAR = 0;
     502
     503  /* Pin assignments for port TC
     504     Pins are all GPIO inputs
     505   */
     506  MCF_GPIO_DDRTC = 0;
     507  MCF_GPIO_PTCPAR = 0;
     508
     509  /* Pin assignments for port TD
     510     Pins are all GPIO inputs
     511   */
     512  MCF_GPIO_DDRTD = 0;
     513  MCF_GPIO_PTDPAR = 0;
     514
     515  /* Pin assignments for port UA
     516     Pin UA3 : UART 0 clear-to-send, UCTS0
     517     Pin UA2 : UART 0 request-to-send, URTS0
     518     Pin UA1 : UART 0 receive data, URXD0
     519     Pin UA0 : UART 0 transmit data, UTXD0
     520   */
     521  MCF_GPIO_DDRUA = 0;
     522  MCF_GPIO_PUAPAR = MCF_GPIO_PUAPAR_PUAPAR3(0x1) |
     523    MCF_GPIO_PUAPAR_PUAPAR2(0x1) |
     524    MCF_GPIO_PUAPAR_PUAPAR1(0x1) | MCF_GPIO_PUAPAR_PUAPAR0(0x1);
     525
     526  /* Pin assignments for port UB
     527     Pin UB3 : UART 1 clear-to-send, UCTS1
     528     Pin UB2 : UART 1 request-to-send, URTS1
     529     Pin UB1 : UART 1 receive data, URXD1
     530     Pin UB0 : UART 1 transmit data, UTXD1
     531   */
     532  MCF_GPIO_DDRUB = 0;
     533  MCF_GPIO_PUBPAR = MCF_GPIO_PUBPAR_PUBPAR3(0x1) |
     534    MCF_GPIO_PUBPAR_PUBPAR2(0x1) |
     535    MCF_GPIO_PUBPAR_PUBPAR1(0x1) | MCF_GPIO_PUBPAR_PUBPAR0(0x1);
     536
     537  /* Pin assignments for port UC
     538     Pin UC3 : UART 2 clear-to-send, UCTS2
     539     Pin UC2 : UART 2 request-to-send, URTS2
     540     Pin UC1 : UART 2 receive data, URXD2
     541     Pin UC0 : UART 2 transmit data, UTXD2
     542   */
     543  MCF_GPIO_DDRUC = 0;
     544  MCF_GPIO_PUCPAR = MCF_GPIO_PUCPAR_PUCPAR3 |
     545    MCF_GPIO_PUCPAR_PUCPAR2 |
     546    MCF_GPIO_PUCPAR_PUCPAR1 | MCF_GPIO_PUCPAR_PUCPAR0;
     547
     548  /* Configure drive strengths */
     549  MCF_GPIO_PDSRH = 0;
     550  MCF_GPIO_PDSRL = 0;
     551
     552  /* Configure Wired-OR register */
     553  MCF_GPIO_PWOR = 0;
     554}
  • c/src/lib/libbsp/m68k/mcf52235/startup/init52235.c

    rd488f12b r8d26950  
    55 */
    66
    7 #include <rtems.h>
    8 #include <bsp.h>
     7#include <stdint.h>
    98
    109extern void _wr_vbr(uint32_t);
     
    1615 */
    1716
    18 extern uint8_t _RamBase[];
     17extern uint8_t _VBR[];
    1918extern uint8_t _INTERRUPT_VECTOR[];
    2019
     
    2423extern uint8_t _data_src_start[];
    2524extern uint8_t _data_dest_start[];
    26 extern uint8_t _data_dest_end[];     
     25extern uint8_t _data_dest_end[];
    2726
     27void Init52235(void)
     28{
     29  register uint32_t i;
     30  register uint32_t *dp, *sp;
     31  register uint8_t *dbp, *sbp;
    2832
    29 void Init52235 (void)
    30 {
    31         register uint32_t i;
    32         register uint32_t *dp, *sp;
    33     register uint8_t *dbp, *sbp;
     33  /*
     34   * Initialize the hardware
     35   */
     36  init_main();
    3437
    35     /*
    36      * Initialize the hardware
    37      */
    38     init_main();
     38  /*
     39   * Copy the vector table to RAM
     40   */
    3941
    40         /*
    41      * Copy the vector table to RAM
    42      */
     42  if (_VBR != _INTERRUPT_VECTOR) {
     43    sp = (uint32_t *) _INTERRUPT_VECTOR;
     44    dp = (uint32_t *) _VBR;
     45    for (i = 0; i < 256; i++) {
     46      *dp++ = *sp++;
     47    }
     48  }
    4349
    44         if(_RamBase != _INTERRUPT_VECTOR)
    45         {
    46         sp = (uint32_t *) _INTERRUPT_VECTOR;
    47         dp = (uint32_t *) _RamBase;
    48         for(i = 0; i < 256; i++)
    49                 {
    50                         *dp++ = *sp++;
    51                 }
    52         }
     50  _wr_vbr((uint32_t) _VBR);
    5351
    54         _wr_vbr((uint32_t) _RamBase);
     52  /*
     53   * Move initialized data from ROM to RAM.
     54   */
     55  if (_data_src_start != _data_dest_start) {
     56    dbp = (uint8_t *) _data_dest_start;
     57    sbp = (uint8_t *) _data_src_start;
     58    i = _data_dest_end - _data_dest_start;
     59    while (i--)
     60      *dbp++ = *sbp++;
     61  }
    5562
    56     /*
    57          * Move initialized data from ROM to RAM.
    58          */
    59         if (_data_src_start != _data_dest_start)
    60         {
    61                 dbp = (uint8_t *) _data_dest_start;
    62                 sbp = (uint8_t *) _data_src_start;
    63                 i = _data_dest_end - _data_dest_start;
    64                 while (i--)
    65                         *dbp++ = *sbp++;
    66         }
    67    
    68         /*
    69          * Zero uninitialized data
    70          */
     63  /*
     64   * Zero uninitialized data
     65   */
    7166
    72         if (_clear_start != _clear_end)
    73         {
    74         sbp = _clear_start;
    75         dbp = _clear_end;       
    76                 i = dbp - sbp;
    77                 while (i--)
    78                         *sbp++ = 0;
    79         }
    80    
    81     /*
    82      * We have to call some kind of RTEMS function here!
    83      */
    84    
    85     boot_card(0, 0, 0);
    86     for(;;);
     67  if (_clear_start != _clear_end) {
     68    sbp = _clear_start;
     69    dbp = _clear_end;
     70    i = dbp - sbp;
     71    while (i--)
     72      *sbp++ = 0;
     73  }
     74
     75  /*
     76   * We have to call some kind of RTEMS function here!
     77   */
     78
     79  boot_card(0, 0, 0);
     80  for (;;) ;
    8781}
    88 
    89 #if 0
    90 /***********************************************************************
    91  *
    92  * This is the exception handler for all defined exceptions.  Most
    93  * exceptions do nothing, but some of the more important ones are
    94  * handled to some extent.
    95  *
    96  * Called by asm_exception_handler
    97  *
    98  * The ColdFire family of processors has a simplified exception stack
    99  * frame that looks like the following:
    100  *
    101  *              3322222222221111 111111
    102  *              1098765432109876 5432109876543210
    103  *           8 +----------------+----------------+
    104  *             |         Program Counter         |
    105  *           4 +----------------+----------------+
    106  *             |FS/Fmt/Vector/FS|      SR        |
    107  *   SP -->  0 +----------------+----------------+
    108  *
    109  * The stack self-aligns to a 4-byte boundary at an exception, with
    110  * the FS/Fmt/Vector/FS field indicating the size of the adjustment
    111  * (SP += 0,1,2,3 bytes).
    112  */
    113 #define MCF5XXX_RD_SF_FORMAT(PTR)       \
    114         ((*((uint16_t *)(PTR)) >> 12) & 0x00FF)
    115 
    116 #define MCF5XXX_RD_SF_VECTOR(PTR)       \
    117         ((*((uint16_t *)(PTR)) >>  2) & 0x00FF)
    118 
    119 #define MCF5XXX_RD_SF_FS(PTR)           \
    120         ( ((*((uint16_t *)(PTR)) & 0x0C00) >> 8) | (*((uint16_t *)(PTR)) & 0x0003) )
    121 
    122 #define MCF5XXX_SF_SR(PTR)      *((uint16_t *)(PTR)+1)
    123 #define MCF5XXX_SF_PC(PTR)      *((uint32_t *)(PTR)+1)
    124 
    125 void ecatch(const char* a_error, uint32_t a_pc)
    126 {
    127     volatile const char* error = a_error;
    128     volatile uint32_t pc = a_pc;
    129     return;
    130 }
    131 
    132 void mcf5xxx_exception_handler(void *framep)
    133 {
    134     volatile uint16_t sr;
    135     volatile uint32_t pc;
    136    
    137         switch (MCF5XXX_RD_SF_FORMAT(framep))
    138         {
    139                 case 4:
    140                 case 5:
    141                 case 6:
    142                 case 7:
    143                         break;
    144                 default:
    145             // Illegal stack type
    146                         ecatch("Illegal stack type", MCF5XXX_SF_PC(framep));
    147                         break;
    148         }
    149 
    150         switch (MCF5XXX_RD_SF_VECTOR(framep))
    151         {
    152                 case 2:
    153                         ecatch("Access Error", MCF5XXX_SF_PC(framep));
    154                         switch (MCF5XXX_RD_SF_FS(framep))
    155                         {
    156                                 case 4:
    157                                         ecatch("Error on instruction fetch\n", 0);
    158                                         break;
    159                                 case 8:
    160                                         ecatch("Error on operand write\n", 0);
    161                                         break;
    162                                 case 9:
    163                                         ecatch("Attempted write to write-protected space\n", 0);
    164                                         break;
    165                                 case 12:
    166                                         ecatch("Error on operand read\n", 0);
    167                                         break;
    168                                 default:
    169                                         ecatch("Reserved Fault Status Encoding\n", 0);
    170                                         break;
    171                         }
    172                         break;
    173                 case 3:
    174                         ecatch("Address Error", MCF5XXX_SF_PC(framep));
    175                         switch (MCF5XXX_RD_SF_FS(framep))
    176                         {
    177                                 case 4:
    178                                         ecatch("Error on instruction fetch\n", 0);
    179                                         break;
    180                                 case 8:
    181                                         ecatch("Error on operand write\n", 0);
    182                                         break;
    183                                 case 9:
    184                                         ecatch("Attempted write to write-protected space\n", 0);
    185                                         break;
    186                                 case 12:
    187                                         ecatch("Error on operand read\n", 0);
    188                                         break;
    189                                 default:
    190                                         ecatch("Reserved Fault Status Encoding\n", 0);
    191                                         break;
    192                         }
    193                         break;
    194                 case 4:
    195                         ecatch("Illegal instruction", MCF5XXX_SF_PC(framep));
    196                         break;
    197                 case 8:
    198                         ecatch("Privilege violation", MCF5XXX_SF_PC(framep));
    199                         break;
    200                 case 9:
    201                         ecatch("Trace Exception", MCF5XXX_SF_PC(framep));
    202                         break;
    203                 case 10:
    204                         ecatch("Unimplemented A-Line Instruction", MCF5XXX_SF_PC(framep));
    205                         break;
    206                 case 11:
    207                         ecatch("Unimplemented F-Line Instruction", MCF5XXX_SF_PC(framep));
    208                         break;
    209                 case 12:
    210                         ecatch("Debug Interrupt", MCF5XXX_SF_PC(framep));
    211                         break;
    212                 case 14:
    213                         ecatch("Format Error", MCF5XXX_SF_PC(framep));
    214                         break;
    215                 case 15:
    216                         ecatch("Unitialized Interrupt", MCF5XXX_SF_PC(framep));
    217                         break;
    218                 case 24:
    219                         ecatch("Spurious Interrupt", MCF5XXX_SF_PC(framep));
    220                         break;
    221                 case 25:
    222                 case 26:
    223                 case 27:
    224                 case 28:
    225                 case 29:
    226                 case 30:
    227                 case 31:
    228                         ecatch("Autovector interrupt level %d\n", MCF5XXX_RD_SF_VECTOR(framep) - 24);
    229                         break;
    230                 case 32:
    231                 case 33:
    232                 case 34:
    233                 case 35:
    234                 case 36:
    235                 case 37:
    236                 case 38:
    237                 case 39:
    238                 case 40:
    239                 case 41:
    240                 case 42:
    241                 case 43:
    242                 case 44:
    243                 case 45:
    244                 case 46:
    245                 case 47:
    246                         ecatch("TRAP #%d\n", MCF5XXX_RD_SF_VECTOR(framep) - 32);
    247                         break;
    248                 case 5:
    249                 case 6:
    250                 case 7:
    251                 case 13:
    252                 case 16:
    253                 case 17:
    254                 case 18:
    255                 case 19:
    256                 case 20:
    257                 case 21:
    258                 case 22:
    259                 case 23:
    260                 case 48:
    261                 case 49:
    262                 case 50:
    263                 case 51:
    264                 case 52:
    265                 case 53:
    266                 case 54:
    267                 case 55:
    268                 case 56:
    269                 case 57:
    270                 case 58:
    271                 case 59:
    272                 case 60:
    273                 case 61:
    274                 case 62:
    275                 case 63:
    276                         ecatch("Reserved: #%d\n", MCF5XXX_RD_SF_VECTOR(framep));
    277                         break;
    278                 default:
    279             ecatch("derivitave handler", MCF5XXX_RD_SF_VECTOR(framep));
    280                         break;
    281         }
    282 }
    283 #endif
Note: See TracChangeset for help on using the changeset viewer.