summaryrefslogtreecommitdiff
path: root/Demo/ColdFire_MCF52259_CodeWarrior/cpu/mcf5225x.c
diff options
context:
space:
mode:
Diffstat (limited to 'Demo/ColdFire_MCF52259_CodeWarrior/cpu/mcf5225x.c')
-rw-r--r--Demo/ColdFire_MCF52259_CodeWarrior/cpu/mcf5225x.c81
1 files changed, 81 insertions, 0 deletions
diff --git a/Demo/ColdFire_MCF52259_CodeWarrior/cpu/mcf5225x.c b/Demo/ColdFire_MCF52259_CodeWarrior/cpu/mcf5225x.c
new file mode 100644
index 00000000..61d82798
--- /dev/null
+++ b/Demo/ColdFire_MCF52259_CodeWarrior/cpu/mcf5225x.c
@@ -0,0 +1,81 @@
+/*
+ * File: mcf52xx.c
+ * Purpose: Source to select CF derivative
+ *
+ * Notes:
+ *
+ * License: All software covered by license agreement in -
+ * docs/Freescale_Software_License.pdf
+ */
+/********************************************************************/
+
+#include "common.h"
+
+/********************************************************************/
+/*
+ * Pause for the specified number of micro-seconds.
+ * Uses DTIM3 as a timer
+ */
+void
+cpu_pause(int usecs)
+{
+ /* Enable the DMA Timer 3 */
+ MCF_DTIM3_DTRR = (vuint32)(usecs - 1);
+ MCF_DTIM3_DTER = MCF_DTIM_DTER_REF;
+ MCF_DTIM3_DTMR = 0
+ | MCF_DTIM_DTMR_PS(SYSTEM_CLOCK)
+ | MCF_DTIM_DTMR_FRR
+ | MCF_DTIM_DTMR_CLK_DIV1
+ | MCF_DTIM_DTMR_RST;
+
+ while ((MCF_DTIM3_DTER & MCF_DTIM_DTER_REF) == 0)
+ {};
+
+ /* Disable the timer */
+ MCF_DTIM3_DTMR = 0;
+}
+
+/********************************************************************/
+void
+board_handle_interrupt (int vector)
+{
+ switch (vector)
+ {
+ case 65: /* Eport Interrupt 1 */
+ printf("SW2\n");
+ MCF_EPORT_EPFR = MCF_EPORT_EPFR_EPF1;
+ break;
+ case 69: /* Eport Interrupt 5 */
+ printf("SW1\n");
+ MCF_EPORT_EPFR = MCF_EPORT_EPFR_EPF5;
+ break;
+ case 71: /* Eport Interrupt 7 */
+ printf("ABORT\n");
+ MCF_EPORT_EPFR = MCF_EPORT_EPFR_EPF7;
+ break;
+ case 66: /* Eport Interrupt 2 */
+ case 67: /* Eport Interrupt 3 */
+ case 68: /* Eport Interrupt 4 */
+ case 70: /* Eport Interrupt 6 */
+ default:
+ MCF_EPORT_EPFR = (uint8)(0x01 << (vector - 64));
+ printf("Edge Port Interrupt #%d\n",vector - 64);
+ break;
+ }
+}
+/********************************************************************/
+
+/********************************************************************/
+void
+cpu_handle_interrupt (int vector)
+{
+ if (vector < 64 || vector > 192)
+ return;
+
+ if (vector >= 64 && vector <= 71)
+ board_handle_interrupt(vector);
+ else
+ printf("User Defined Vector #%d\n",vector);
+}
+/********************************************************************/
+