| 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. |