mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-09-01 11:53:53 -04:00
Add FreeRTOS-Plus directory.
This commit is contained in:
parent
7bd5f21ad5
commit
f508a5f653
6798 changed files with 134949 additions and 19 deletions
516
FreeRTOS/Demo/ColdFire_MCF52259_CodeWarrior/cpu/mcf5xxx.c
Normal file
516
FreeRTOS/Demo/ColdFire_MCF52259_CodeWarrior/cpu/mcf5xxx.c
Normal file
|
@ -0,0 +1,516 @@
|
|||
/*
|
||||
* File: mcf5xxx.c
|
||||
* Purpose: Generic high-level routines for generic ColdFire processors
|
||||
*
|
||||
* Notes:
|
||||
*
|
||||
* License: All software covered by license agreement in -
|
||||
* docs/Freescale_Software_License.pdf
|
||||
*/
|
||||
|
||||
#include "common.h"
|
||||
|
||||
/********************************************************************/
|
||||
|
||||
#define EXCEPTFMT "%s -- PC = %#08X\n"
|
||||
|
||||
/********************************************************************/
|
||||
/*
|
||||
* This is the exception handler for all defined exceptions. Most
|
||||
* exceptions do nothing, but some of the more important ones are
|
||||
* handled to some extent.
|
||||
*
|
||||
* Called by asm_exception_handler
|
||||
*/
|
||||
void
|
||||
mcf5xxx_exception_handler (void *framep)
|
||||
{
|
||||
switch (MCF5XXX_RD_SF_FORMAT(framep))
|
||||
{
|
||||
case 4:
|
||||
case 5:
|
||||
case 6:
|
||||
case 7:
|
||||
break;
|
||||
default:
|
||||
printf(EXCEPTFMT,"Illegal stack type", MCF5XXX_SF_PC(framep));
|
||||
break;
|
||||
}
|
||||
|
||||
switch (MCF5XXX_RD_SF_VECTOR(framep))
|
||||
{
|
||||
case 2:
|
||||
printf(EXCEPTFMT, "Access Error", MCF5XXX_SF_PC(framep));
|
||||
switch (MCF5XXX_RD_SF_FS(framep))
|
||||
{
|
||||
case 4:
|
||||
printf("Error on instruction fetch\n");
|
||||
break;
|
||||
case 8:
|
||||
printf("Error on operand write\n");
|
||||
break;
|
||||
case 9:
|
||||
printf("Attempted write to write-protected space\n");
|
||||
break;
|
||||
case 12:
|
||||
printf("Error on operand read\n");
|
||||
break;
|
||||
default:
|
||||
printf("Reserved Fault Status Encoding\n");
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
printf(EXCEPTFMT, "Address Error", MCF5XXX_SF_PC(framep));
|
||||
switch (MCF5XXX_RD_SF_FS(framep))
|
||||
{
|
||||
case 4:
|
||||
printf("Error on instruction fetch\n");
|
||||
break;
|
||||
case 8:
|
||||
printf("Error on operand write\n");
|
||||
break;
|
||||
case 9:
|
||||
printf("Attempted write to write-protected space\n");
|
||||
break;
|
||||
case 12:
|
||||
printf("Error on operand read\n");
|
||||
break;
|
||||
default:
|
||||
printf("Reserved Fault Status Encoding\n");
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
printf(EXCEPTFMT, "Illegal instruction", MCF5XXX_SF_PC(framep));
|
||||
break;
|
||||
case 8:
|
||||
printf(EXCEPTFMT, "Privilege violation", MCF5XXX_SF_PC(framep));
|
||||
break;
|
||||
case 9:
|
||||
printf(EXCEPTFMT, "Trace Exception", MCF5XXX_SF_PC(framep));
|
||||
break;
|
||||
case 10:
|
||||
printf(EXCEPTFMT, "Unimplemented A-Line Instruction", \
|
||||
MCF5XXX_SF_PC(framep));
|
||||
break;
|
||||
case 11:
|
||||
printf(EXCEPTFMT, "Unimplemented F-Line Instruction", \
|
||||
MCF5XXX_SF_PC(framep));
|
||||
break;
|
||||
case 12:
|
||||
printf(EXCEPTFMT, "Debug Interrupt", MCF5XXX_SF_PC(framep));
|
||||
break;
|
||||
case 14:
|
||||
printf(EXCEPTFMT, "Format Error", MCF5XXX_SF_PC(framep));
|
||||
break;
|
||||
case 15:
|
||||
printf(EXCEPTFMT, "Unitialized Interrupt", MCF5XXX_SF_PC(framep));
|
||||
break;
|
||||
case 24:
|
||||
printf(EXCEPTFMT, "Spurious Interrupt", MCF5XXX_SF_PC(framep));
|
||||
break;
|
||||
case 25:
|
||||
case 26:
|
||||
case 27:
|
||||
case 28:
|
||||
case 29:
|
||||
case 30:
|
||||
case 31:
|
||||
printf("Autovector interrupt level %d\n",
|
||||
MCF5XXX_RD_SF_VECTOR(framep) - 24);
|
||||
break;
|
||||
case 32:
|
||||
case 33:
|
||||
case 34:
|
||||
case 35:
|
||||
case 36:
|
||||
case 37:
|
||||
case 38:
|
||||
case 39:
|
||||
case 40:
|
||||
case 41:
|
||||
case 42:
|
||||
case 43:
|
||||
case 44:
|
||||
case 45:
|
||||
case 46:
|
||||
case 47:
|
||||
printf("TRAP #%d\n", MCF5XXX_RD_SF_VECTOR(framep) - 32);
|
||||
break;
|
||||
case 5:
|
||||
case 6:
|
||||
case 7:
|
||||
case 13:
|
||||
case 16:
|
||||
case 17:
|
||||
case 18:
|
||||
case 19:
|
||||
case 20:
|
||||
case 21:
|
||||
case 22:
|
||||
case 23:
|
||||
case 48:
|
||||
case 49:
|
||||
case 50:
|
||||
case 51:
|
||||
case 52:
|
||||
case 53:
|
||||
case 54:
|
||||
case 55:
|
||||
case 56:
|
||||
case 57:
|
||||
case 58:
|
||||
case 59:
|
||||
case 60:
|
||||
case 61:
|
||||
case 62:
|
||||
case 63:
|
||||
printf("Reserved: #%d\n", MCF5XXX_RD_SF_VECTOR(framep));
|
||||
break;
|
||||
default:
|
||||
cpu_handle_interrupt(MCF5XXX_RD_SF_VECTOR(framep));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/********************************************************************/
|
||||
/*
|
||||
* Interpret the reset values of D0 and D1
|
||||
*
|
||||
* Parameters:
|
||||
* d0 - the reset value of data register zero
|
||||
* d1 - the reset value of data register one
|
||||
*/
|
||||
void
|
||||
mcf5xxx_interpret_d0d1(int d0, int d1)
|
||||
{
|
||||
#ifdef DEBUG_PRINT
|
||||
printf("\nColdFire Core Configuration:\n");
|
||||
printf("----------------------------\n");
|
||||
printf("Processor Family %#02x\n",MCF5XXX_D0_PF(d0));
|
||||
printf("ColdFire Core Version: %d\n",MCF5XXX_D0_VER(d0));
|
||||
printf("Processor Revision: %d\n",MCF5XXX_D0_REV(d1));
|
||||
printf("Bus Width: ");
|
||||
switch (MCF5XXX_D1_BUSW(d1))
|
||||
{
|
||||
case 0:
|
||||
printf("32-bit\n");
|
||||
break;
|
||||
default:
|
||||
printf("Reserved\n");
|
||||
}
|
||||
printf("ISA Version: ");
|
||||
switch (MCF5XXX_D0_ISA(d0))
|
||||
{
|
||||
case 0:
|
||||
printf("A\n");
|
||||
break;
|
||||
case 1:
|
||||
printf("B\n");
|
||||
break;
|
||||
case 2:
|
||||
printf("C\n");
|
||||
break;
|
||||
case 8:
|
||||
printf("A+\n");
|
||||
break;
|
||||
default:
|
||||
printf("Reserved\n");
|
||||
}
|
||||
printf("Debug Version: ");
|
||||
switch (MCF5XXX_D0_DEBUG(d0))
|
||||
{
|
||||
case 0:
|
||||
printf("A\n");
|
||||
break;
|
||||
case 1:
|
||||
printf("B\n");
|
||||
break;
|
||||
case 2:
|
||||
printf("C\n");
|
||||
break;
|
||||
case 3:
|
||||
printf("D\n");
|
||||
break;
|
||||
case 4:
|
||||
printf("E\n");
|
||||
break;
|
||||
case 9:
|
||||
printf("B+\n");
|
||||
break;
|
||||
default :
|
||||
printf("Reserved\n");
|
||||
}
|
||||
printf("MAC: %s\n", MCF5XXX_D0_MAC(d0) ? "Yes" : "No");
|
||||
printf("DIV: %s\n", MCF5XXX_D0_DIV(d0) ? "Yes" : "No");
|
||||
printf("EMAC: %s\n", MCF5XXX_D0_EMAC(d0) ? "Yes" : "No");
|
||||
printf("FPU: %s\n", MCF5XXX_D0_FPU(d0) ? "Yes" : "No");
|
||||
printf("MMU: %s\n", MCF5XXX_D0_MMU(d0) ? "Yes" : "No");
|
||||
printf("RAM Bank 0 Size: ");
|
||||
switch (MCF5XXX_D1_RAM0SIZ(d1))
|
||||
{
|
||||
case 0:
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
printf("None\n");
|
||||
break;
|
||||
case 4:
|
||||
printf("4KB\n");
|
||||
break;
|
||||
case 5:
|
||||
printf("8KB\n");
|
||||
break;
|
||||
case 6:
|
||||
printf("16KB\n");
|
||||
break;
|
||||
case 7:
|
||||
printf("32KB\n");
|
||||
break;
|
||||
case 8:
|
||||
printf("64KB\n");
|
||||
break;
|
||||
case 9:
|
||||
printf("128KB\n");
|
||||
break;
|
||||
case 10:
|
||||
printf("256KB\n");
|
||||
break;
|
||||
case 11:
|
||||
printf("512KB\n");
|
||||
break;
|
||||
default:
|
||||
printf("Reserved\n");
|
||||
}
|
||||
printf("RAM Bank 1 Size: ");
|
||||
switch (MCF5XXX_D1_RAM1SIZ(d1))
|
||||
{
|
||||
case 0:
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
printf("None\n");
|
||||
break;
|
||||
case 4:
|
||||
printf("4KB\n");
|
||||
break;
|
||||
case 5:
|
||||
printf("8KB\n");
|
||||
break;
|
||||
case 6:
|
||||
printf("16KB\n");
|
||||
break;
|
||||
case 7:
|
||||
printf("32KB\n");
|
||||
break;
|
||||
case 8:
|
||||
printf("64KB\n");
|
||||
break;
|
||||
case 9:
|
||||
printf("128KB\n");
|
||||
break;
|
||||
case 10:
|
||||
printf("256KB\n");
|
||||
break;
|
||||
case 11:
|
||||
printf("512KB\n");
|
||||
break;
|
||||
default:
|
||||
printf("Reserved\n");
|
||||
}
|
||||
printf("ROM Bank 0 Size: ");
|
||||
switch (MCF5XXX_D1_ROM0SIZ(d1))
|
||||
{
|
||||
case 0:
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
printf("None\n");
|
||||
break;
|
||||
case 4:
|
||||
printf("4KB\n");
|
||||
break;
|
||||
case 5:
|
||||
printf("8KB\n");
|
||||
break;
|
||||
case 6:
|
||||
printf("16KB\n");
|
||||
break;
|
||||
case 7:
|
||||
printf("32KB\n");
|
||||
break;
|
||||
case 8:
|
||||
printf("64KB\n");
|
||||
break;
|
||||
case 9:
|
||||
printf("128KB\n");
|
||||
default:
|
||||
printf("Reserved\n");
|
||||
}
|
||||
printf("ROM Bank 1 Size: ");
|
||||
switch (MCF5XXX_D1_ROM1SIZ(d1))
|
||||
{
|
||||
case 0:
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
printf("None\n");
|
||||
break;
|
||||
case 4:
|
||||
printf("4KB\n");
|
||||
break;
|
||||
case 5:
|
||||
printf("8KB\n");
|
||||
break;
|
||||
case 6:
|
||||
printf("16KB\n");
|
||||
break;
|
||||
case 7:
|
||||
printf("32KB\n");
|
||||
break;
|
||||
case 8:
|
||||
printf("64KB\n");
|
||||
break;
|
||||
case 9:
|
||||
printf("128KB\n");
|
||||
default:
|
||||
printf("Reserved\n");
|
||||
}
|
||||
printf("Cache Line Size: ");
|
||||
switch (MCF5XXX_D1_CL(d1))
|
||||
{
|
||||
case 0:
|
||||
printf("16-byte\n");
|
||||
break;
|
||||
default:
|
||||
printf("Reserved\n");
|
||||
}
|
||||
printf("I-Cache Associativity: ");
|
||||
switch (MCF5XXX_D1_ICA(d1))
|
||||
{
|
||||
case 0:
|
||||
printf("Four-way\n");
|
||||
break;
|
||||
case 1:
|
||||
printf("Direct mapped\n");
|
||||
break;
|
||||
default:
|
||||
printf("Reserved\n");
|
||||
}
|
||||
printf("D-Cache Associativity: ");
|
||||
switch (MCF5XXX_D1_DCA(d1))
|
||||
{
|
||||
case 0:
|
||||
printf("Four-way\n");
|
||||
break;
|
||||
case 1:
|
||||
printf("Direct mapped\n");
|
||||
break;
|
||||
default:
|
||||
printf("Reserved\n");
|
||||
}
|
||||
printf("I-Cache Size: ");
|
||||
switch (MCF5XXX_D1_ICSIZ(d1))
|
||||
{
|
||||
case 0:
|
||||
printf("None\n");
|
||||
break;
|
||||
case 1:
|
||||
printf("512B\n");
|
||||
break;
|
||||
case 2:
|
||||
printf("1KB\n");
|
||||
break;
|
||||
case 3:
|
||||
printf("2KB\n");
|
||||
break;
|
||||
case 4:
|
||||
printf("4KB\n");
|
||||
break;
|
||||
case 5:
|
||||
printf("8KB\n");
|
||||
break;
|
||||
case 6:
|
||||
printf("16KB\n");
|
||||
break;
|
||||
case 7:
|
||||
printf("32KB\n");
|
||||
break;
|
||||
case 8:
|
||||
printf("64KB\n");
|
||||
break;
|
||||
default:
|
||||
printf("Reserved\n");
|
||||
}
|
||||
printf("D-Cache Size: ");
|
||||
switch (MCF5XXX_D1_DCSIZ(d1))
|
||||
{
|
||||
case 0:
|
||||
printf("None\n");
|
||||
break;
|
||||
case 1:
|
||||
printf("512B\n");
|
||||
break;
|
||||
case 2:
|
||||
printf("1KB\n");
|
||||
break;
|
||||
case 3:
|
||||
printf("2KB\n");
|
||||
break;
|
||||
case 4:
|
||||
printf("4KB\n");
|
||||
break;
|
||||
case 5:
|
||||
printf("8KB\n");
|
||||
break;
|
||||
case 6:
|
||||
printf("16KB\n");
|
||||
break;
|
||||
case 7:
|
||||
printf("32KB\n");
|
||||
break;
|
||||
case 8:
|
||||
printf("64KB\n");
|
||||
break;
|
||||
default:
|
||||
printf("Reserved\n");
|
||||
}
|
||||
printf("\n");
|
||||
#else
|
||||
/* Remove compiler warnings. */
|
||||
( void ) d0;
|
||||
( void ) d1;
|
||||
#endif
|
||||
}
|
||||
|
||||
/********************************************************************/
|
||||
void
|
||||
mcf5xxx_irq_enable (void)
|
||||
{
|
||||
asm_set_ipl(0);
|
||||
}
|
||||
/********************************************************************/
|
||||
void
|
||||
mcf5xxx_irq_disable (void)
|
||||
{
|
||||
asm_set_ipl(7);
|
||||
}
|
||||
/********************************************************************/
|
||||
/*
|
||||
* Write new interrupt vector handler into the vector table
|
||||
* Return previous handler address
|
||||
*/
|
||||
|
||||
ADDRESS
|
||||
mcf5xxx_set_handler (int vector, ADDRESS new_handler)
|
||||
{
|
||||
ADDRESS old_handler;
|
||||
extern uint32 __VECTOR_RAM[];
|
||||
|
||||
old_handler = (ADDRESS) __VECTOR_RAM[vector];
|
||||
__VECTOR_RAM[vector] = (uint32)new_handler;
|
||||
return old_handler;
|
||||
}
|
||||
|
||||
/********************************************************************/
|
Loading…
Add table
Add a link
Reference in a new issue