URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
Compare Revisions
- This comparison shows the changes necessary to convert path
/openrisc/trunk/orpsocv2/sw/drivers
- from Rev 409 to Rev 411
- ↔ Reverse comparison
Rev 409 → Rev 411
/or1200/exceptions.c
41,7 → 41,7
|
extern void int_main(); |
|
void (*except_handlers[]) (void) = {0, // 0 |
void (*except_handlers[]) (void ) = {0, // 0 |
0, // 1 |
0, // 2 |
0, // 3 |
64,7 → 64,7
|
|
void |
add_handler(unsigned long vector, void (*handler) (void)) |
add_handler(unsigned long vector, void (*handler) (void *)) |
{ |
except_handlers[vector] = handler; |
} |
/or1200/or1200-utils.c
3,13 → 3,15
#include "board.h" // For timer rate (IN_CLK, TICKS_PER_SEC) |
|
/* For writing into SPR. */ |
void mtspr(unsigned long spr, unsigned long value) |
void |
mtspr(unsigned long spr, unsigned long value) |
{ |
asm("l.mtspr\t\t%0,%1,0": : "r" (spr), "r" (value)); |
} |
|
/* For reading SPR. */ |
unsigned long mfspr(unsigned long spr) |
unsigned long |
mfspr(unsigned long spr) |
{ |
unsigned long value; |
asm("l.mfspr\t\t%0,%1,0" : "=r" (value) : "r" (spr)); |
17,7 → 19,8
} |
|
/* Print out a character via simulator */ |
void sim_putc(unsigned char c) |
void |
sim_putc(unsigned char c) |
{ |
asm("l.addi\tr3,%0,0": :"r" (c)); |
asm("l.nop %0": :"K" (NOP_PUTC)); |
24,7 → 27,8
} |
|
/* print long */ |
void report(unsigned long value) |
void |
report(unsigned long value) |
{ |
asm("l.addi\tr3,%0,0": :"r" (value)); |
asm("l.nop %0": :"K" (NOP_REPORT)); |
31,7 → 35,8
} |
|
/* Loops/exits simulation */ |
void exit (int i) |
void |
exit (int i) |
{ |
asm("l.add r3,r0,%0": : "r" (i)); |
asm("l.nop %0": :"K" (NOP_EXIT)); |
51,14 → 56,17
|
/* Tick timer functions */ |
/* Enable tick timer and interrupt generation */ |
void enable_timer(void) |
void |
cpu_enable_timer(void) |
{ |
mtspr(SPR_TTMR, SPR_TTMR_IE | SPR_TTMR_RT | ((IN_CLK/TICKS_PER_SEC) & SPR_TTMR_PERIOD)); |
mtspr(SPR_SR, SPR_SR_TEE | mfspr(SPR_SR)); |
mtspr(SPR_TTMR, SPR_TTMR_IE | SPR_TTMR_RT | ((IN_CLK/TICKS_PER_SEC) & SPR_TTMR_PERIOD)); |
|
} |
|
/* Disable tick timer and interrupt generation */ |
void disable_timer(void) |
void |
cpu_disable_timer(void) |
{ |
// Disable timer: clear it all! |
mtspr (SPR_SR, mfspr (SPR_SR) & ~SPR_SR_TEE); |
67,7 → 75,9
} |
|
/* Timer increment - called by interrupt routine */ |
void timer_tick(void) |
/* Now actually done in interrupt vector code in crt0.S */ |
void |
cpu_timer_tick(void) |
{ |
timer_ticks++; |
mtspr(SPR_TTMR, SPR_TTMR_IE | SPR_TTMR_RT | ((IN_CLK/TICKS_PER_SEC) & SPR_TTMR_PERIOD)); |
74,21 → 84,24
} |
|
/* Reset tick counter */ |
void clear_timer_ticks(void) |
void |
cpu_reset_timer_ticks(void) |
{ |
timer_ticks=0; |
} |
|
/* Get tick counter */ |
unsigned long get_timer_ticks(void) |
unsigned long |
cpu_get_timer_ticks(void) |
{ |
return timer_ticks; |
} |
|
/* Wait for 10ms */ |
void wait_10ms(void) |
void |
cpu_sleep_10ms(void) |
{ |
unsigned long first_time = get_timer_ticks(); |
while (first_time == get_timer_ticks()); |
unsigned long first_time = cpu_get_timer_ticks(); |
while (first_time == cpu_get_timer_ticks()); |
} |
|
/or1200/include/int.h
1,6 → 1,7
#ifndef _INT_H_ |
#define _INT_H_ |
/* Number of interrupt handlers */ |
|
/* Number of interrupt handlers - really depends on PIC width in OR1200*/ |
#define MAX_INT_HANDLERS 32 |
|
/* Handler entry */ |
13,7 → 14,7
int int_add(unsigned long vect, void (* handler)(void *), void *arg); |
|
/* Add exception vector handler */ |
void add_handler(unsigned long vector, void (*handler) (void)); |
void add_handler(unsigned long vector, void (* handler) (void *)); |
|
/* Initialize routine */ |
int int_init(); |
/or1200/include/or1200-utils.h
39,16 → 39,16
/* Variable keeping track of timer ticks */ |
extern unsigned long timer_ticks; |
/* Enable tick timer and interrupt generation */ |
void enable_timer(void); |
void cpu_enable_timer(void); |
/* Disable tick timer and interrupt generation */ |
void disable_timer(void); |
void cpu_disable_timer(void); |
/* Timer increment - called by interrupt routine */ |
void timer_tick(void); |
void cpu_timer_tick(void); |
/* Reset tick counter */ |
void clear_timer_ticks(void); |
void cpu_reset_timer_ticks(void); |
/* Get tick counter */ |
unsigned long get_timer_ticks(void); |
unsigned long cpu_get_timer_ticks(void); |
/* Wait for 10ms */ |
void wait_10ms(void); |
void cpu_sleep_10ms(void); |
|
#endif |