Committed on the Free edition of March Hare Software CVSNT Server. Upgrade to CVS Suite for more features and support: http://march-hare.com/cvsnt/ git-svn-id: http://moon:8086/svn/vhdl/trunk@272 cc03376c-175c-47c8-b038-4cd826a8556b
125 lines
2.0 KiB
C
125 lines
2.0 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include "irq.h"
|
|
#include "libsys.h"
|
|
|
|
char buffer[16384];
|
|
char * volatile pPtr_r;
|
|
char * volatile pPtr_w;
|
|
|
|
void handler0(void)
|
|
{
|
|
printf("Interrupt 0\n");
|
|
interrupt_clr(0);
|
|
}
|
|
|
|
void handler1(void)
|
|
{
|
|
printf("Interrupt 1\n");
|
|
interrupt_clr(1);
|
|
}
|
|
|
|
void handler2(void)
|
|
{
|
|
printf("Interrupt 2\n");
|
|
}
|
|
|
|
void handler3(void)
|
|
{
|
|
volatile char *pUART_stat = (char*)sys_uart_stat;
|
|
volatile char *pUART_data = (char*)sys_uart_data;
|
|
|
|
while((0x10 & *pUART_stat))
|
|
{
|
|
// sputs("w: "); print_word((int)pPtr_w); sputs("\n");
|
|
if (pPtr_w == &buffer[16383])
|
|
pPtr_w = buffer;
|
|
*(pPtr_w++) = *pUART_data;
|
|
}
|
|
|
|
}
|
|
|
|
void handler4(void)
|
|
{
|
|
printf("Interrupt 4\n");
|
|
}
|
|
|
|
void handler5(void)
|
|
{
|
|
printf("Interrupt 5\n");
|
|
}
|
|
|
|
void handler6(void)
|
|
{
|
|
printf("Interrupt 6\n");
|
|
}
|
|
|
|
void handler7(void)
|
|
{
|
|
printf("Interrupt 7\n");
|
|
}
|
|
|
|
int main(void)
|
|
{
|
|
|
|
printf("Hello\n");
|
|
memset(buffer, 0, sizeof(buffer));
|
|
pPtr_r = buffer;
|
|
pPtr_w = buffer;
|
|
interrupt_register(0, handler0);
|
|
interrupt_enable(0);
|
|
|
|
interrupt_register(1, handler1);
|
|
interrupt_enable(1);
|
|
|
|
interrupt_register(2, handler2);
|
|
interrupt_enable(2);
|
|
|
|
interrupt_register(3, handler3);
|
|
interrupt_enable(3);
|
|
|
|
interrupt_register(4, handler4);
|
|
// interrupt_enable(4);
|
|
|
|
interrupt_register(5, handler5);
|
|
interrupt_enable(5);
|
|
|
|
interrupt_register(6, handler6);
|
|
interrupt_enable(6);
|
|
|
|
interrupt_register(7, handler7);
|
|
interrupt_enable(7);
|
|
|
|
printf("Start:\n");
|
|
|
|
interrupt_set(0);
|
|
interrupt_set(1);
|
|
interrupt_set(2);
|
|
interrupt_set(3);
|
|
interrupt_set(4);
|
|
interrupt_set(5);
|
|
interrupt_set(6);
|
|
interrupt_set(7);
|
|
|
|
sputs("r: "); print_word((int)pPtr_r); sputs("\n");
|
|
sputs("w: "); print_word((int)pPtr_w); sputs("\n");
|
|
|
|
// Print Status register
|
|
sputs("Status : ");
|
|
print_word(CP0_SR_read());
|
|
sputs("\n");
|
|
|
|
while(1)
|
|
{
|
|
if(pPtr_w != pPtr_r)
|
|
{
|
|
// sputs("r: "); print_word((int)pPtr_r); sputs("\n");
|
|
if (pPtr_r == &buffer[16383])
|
|
pPtr_r = buffer;
|
|
writechar(*(pPtr_r++));
|
|
}
|
|
}
|
|
return 0;
|
|
}
|