OpenCores
URL https://opencores.org/ocsvn/mips789/mips789/trunk

Subversion Repositories mips789

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 16 to Rev 17
    Reverse comparison

Rev 16 → Rev 17

/trunk/Clib/dvc_lib.c
0,0 → 1,198
#include "dvc_lib.h"
void __inline dis_byte(unsigned char data)
{
SEG7LED=data ;
}
 
void dly_us(unsigned int us)
{
int i ;
while(us--)
{
i=FRQ/1000000/3-2 ;
while(i--);
//delay 1us
}
}
 
void dly_ms(unsigned int ms)
{
int i ,us=1000*ms;
while(us--)
{
i=12;
while(i--);
}
}
 
void uart0_putc(unsigned char data)
{
while((STATUS&(1<<2))!=0);
UART0_DATA=data ;
}
unsigned char uart0_getc(void)
{
unsigned char ret=0 ;
while((STATUS&(1<<3))==0);
ret=UART0_DATA ;
set_bit(CMD,1);
set_bit(CMD,1);
clr_bit(CMD,1);
return ret ;
}
unsigned char enqire_rxd(void)
{
return(STATUS&(1<<3))?1:0 ;
}
 
void uart0_putstr(char*str)
{
while(1)if(*str=='\0')return ;
else uart0_putc(*str++);
}
 
void __inline led1_on(void)
{
CMD=CMD&(~(1<<5));
}
void __inline led1_off(void)
{
CMD=CMD|(1<<5);
}
void __inline led2_on(void)
{
CMD=CMD&(~(1<<6));
}
void __inline led2_off(void)
{
CMD=CMD|(1<<6);
}
 
//lcd part
 
void LCD_init(void)
{
char i=3 ;
CLEARSCREEN ;
//clear screen
while(i--)
{
LCD_en_command(DATA_MODE);
//set 8 bit data transmission mode
dly_us(LCD_INIT_US);
}
LCD_en_command(OPEN_SCREEN);
//open display (enable lcd display)
dly_us(LCD_DLY_US);
LCD_en_command(DISPLAY_ADDRESS);
//set lcd first display address
dly_us(LCD_DLY_US);
CLEARSCREEN ;
//clear screen
dly_us(LCD_DLY_US);
}
 
void LCD_en_command(unsigned char command)
{
LCDDATA=command ;
clr_bit(CMD,2);
// LCD1602_RS=LOW;
clr_bit(CMD,3);
//LCD1602_RW=LOW;
clr_bit(CMD,4);
//LCD1602_EN=LOW;
dly_us(LCD_DLY_US);
set_bit(CMD,4);
//LCD1602_EN=HIGH;
}
 
void LCD_en_dat(unsigned char dat)
{
LCDDATA=dat ;
set_bit(CMD,2);
//LCD1602_RS=HIGH;
clr_bit(CMD,3);
//LCD1602_RW=LOW;
clr_bit(CMD,4);
//LCD1602_EN=LOW;
dly_us(LCD_DLY_US);
set_bit(CMD,4);
//LCD1602_EN=HIGH;
}
 
void LCD_set_xy(unsigned char x,unsigned char y)
{
unsigned char address ;
if(y==LINE1)
address=LINE1_HEAD+x ;
else
address=LINE2_HEAD+x ;
LCD_en_command(address);
}
 
void LCD_write_char(unsigned x,unsigned char y,unsigned char dat)
{
LCD_set_xy(x,y);
LCD_en_dat(dat);
}
 
void LCD_write_string(unsigned char X,unsigned char Y,unsigned char*s)
{
LCD_set_xy(X,Y);
while(*s)
{
LCD_en_dat(*s++);
}
}
 
void download()
{
unsigned char*addr=(void*)0 ;
uart0_putstr((char*)"This is MIPS789 BOOTLOADER\n");
dis_byte(0xcc);
//attenions please'!'
while(uart0_getc()!='!')uart0_putc((unsigned char)('O'));
//'O'k .i am ready
while(1)
{
*addr=(unsigned char)uart0_getc();
dis_byte((unsigned char)(*addr++));
}
}
 
void tmr_en(unsigned int cntr)
{
set_bit(CMD,8);
TMR_DATA=cntr ;
tmr_clr();
}
 
void tmr_disen(void)
{
clr_bit(CMD,8);
clr_bit(CMD,7);
}
 
void tmr_clr(void)
{
set_bit(CMD,7);
set_bit(CMD,7);
clr_bit(CMD,7);
clr_bit(CMD,7);
}
 
unsigned int read_tmr()
{
return TMR_DATA ;
}
 
 
unsigned char get_key1()
{
return(STATUS&1)?0:1 ;
}
 
unsigned char get_key2()
{
return(STATUS&(1<<1))?0:1 ;
}
/trunk/Clib/dvc_lib.h
0,0 → 1,67
/*
`define UART_DATA_ADDR 'H80_00_00_28
`define CMD_ADDR 'H80_00_00_14
`define STATUS_ADDR 'H80_00_00_18
`define SEG7LED_ADDR 'H80_00_00_1C
`define SIM_DIS_ADDR 'H80_00_00_20
`define LCD_DATA_ADDR 'H80_00_00_24
`define TMR_IRQ_ADDR 'H80_00_00_28
`define TMR_DATA_ADDR 'H80_00_00_34
`define KEY1_IRQ_ADDR 'H80_00_00_2C
`define KEY2_IRQ_ADDR 'H80_00_00_30
*/
 
#define FRQ 50*1000*1000
#define LCDDATA *(volatile unsigned char*)0X80000024
#define SEG7LED *(volatile unsigned char*)0X8000001C
#define UART0_DATA *(volatile unsigned char*)0x80000028
#define CMD *(volatile unsigned int* )0x80000014
#define STATUS *(volatile unsigned int* )0x80000018
#define TMR_DATA *(volatile unsigned int* )0x80000034
 
#define set_bit(a,b) a=a|(1<<b)
#define clr_bit(a,b) a=a&(~(1<<b))
 
#define LINE1 0
#define LINE2 1
#define LINE1_HEAD 0x80
#define LINE2_HEAD 0xC0
#define DATA_MODE 0x38
#define OPEN_SCREEN 0x0C
#define DISPLAY_ADDRESS 0x80
#define CLEARSCREEN LCD_en_command(0x01)
#define LCD_DLY_US 100*10
#define LCD_INIT_US 50*1000*10
 
#define HIGH 1
#define LOW 0
#define TRUE 1
#define ZERO 0
 
void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s);
void LCD_write_char( unsigned x,unsigned char y,unsigned char dat);
void LCD_set_xy( unsigned char x, unsigned char y );
void LCD_en_dat(unsigned char dat);
void LCD_en_command(unsigned char command);
void LCD_delay(void);
void dly_us(unsigned int us );
void LCD_init(void);
void led1_on();
void led1_off();
void led2_on();
void led2_off();
void uart0_putstr(char *str);
unsigned char uart0_getc(void);
unsigned char enqire_rxd(void);
void uart0_putc(unsigned char data);
void dis_byte(unsigned char data);
void download();
unsigned char get_key1();
unsigned char get_key2();
#define getkey1 get_key1
#define getkey2 get_key2
 
void tmr_en(unsigned int cntr);
void tmr_disen(void);
void tmr_clr(void);
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.