| CONTENT: |
| |
| epic.h |
| epic1.c |
| epic2.s |
| |
| WHAT ARE THESE FILES: |
| |
| These files contain MPC8240 (Kahlua) EPIC |
| driver routines. The driver routines are not |
| written for any specific operating system. |
| They serves the purpose of code sample, and |
| jump-start for using the MPC8240 EPIC unit. |
| |
| For the reason of correctness of C language |
| syntax, these files are compiled by Metaware |
| C compiler and assembler. |
| |
| ENDIAN NOTATION: |
| |
| The algorithm is designed for big-endian mode, |
| software is responsible for byte swapping. |
| |
| USAGE: |
| |
| 1. The host system that is running on MPC8240 |
| shall link the files listed here. The memory |
| location of driver routines shall take into |
| account of that driver routines need to run |
| in supervisor mode and they process external |
| interrupts. |
| |
| The routine epic_exception shall be called by |
| exception vector at location 0x500, i.e., |
| 603e core external exception vector. |
| |
| 2. The host system is responsible for configuring |
| the MPC8240 including Embedded Utilities Memory |
| Block. All EPIC driver functions require the |
| content of Embedded Utilities Memory Block |
| Base Address Register, EUMBBAR, as the first |
| parameter. |
| |
| 3. Before EPIC unit of MPC8240 can be used, |
| initialize EPIC unit by calling epicInit |
| with the corresponding parameters. |
| |
| The initialization shall disable the 603e |
| core External Exception by calling CoreExtIntDisable( ). |
| Next, call epicInit( ). Last, enable the 603e core |
| External Exception by calling CoreExtIntEnable( ). |
| |
| 4. After EPIC unit has been successfully initialized, |
| epicIntSourceSet( ) shall be used to register each |
| external interrupt source. Anytime, an external |
| interrupt source can be disabled or enabled by |
| calling corresponding function, epicIntDisable( ), |
| or epicIntEnable( ). |
| |
| Global Timers' resource, base count and frequency, |
| can be changed by calling epicTmFrequencySet( ) |
| and epicTmBaseSet( ). |
| |
| To stop counting a specific global timer, use |
| the function, epicTmInhibit while epicTmEnable |
| can be used to start counting a timer. |
| |
| 5. To mask a set of external interrupts that are |
| are certain level below, epicIntPrioritySet( ) |
| can be used. For example, if the processor's |
| current task priority register is set to 0x7, |
| only interrupts of priority 0x8 or higher will |
| be passed to the processor. |
| |
| Be careful when using this function. It may |
| corrupt the current interrupt pending, selector, |
| and request registers, resulting an invalid vetor. |
| |
| After enabling an interrupt, disable it may also |
| cause an invalid vector. User may consider using |
| the spurious vector interrupt service routine to |
| handle this case. |
| |
| 6. The EPIC driver routines contains a set |
| of utilities, Set and Get, for host system |
| to query and modify the desired EPIC source |
| registers. |
| |
| 7. Each external interrupt source shall register |
| its interrupt service routine. The routine |
| shall contain all interrupt source specific |
| processes and keep as short as possible. |
| |
| Special customized end of interrupt routine |
| is optional. If it is needed, it shall contain |
| the external interrupt source specific end of |
| interrupt process. |
| |
| External interrupt exception vector at 0x500 |
| shall always call the epicEOI just before |
| rfi instruction. Refer to the routine, |
| epic_exception, for a code sample. |