⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 coreutils.h

📁 ucos在x86上的移植代码。吐血推荐啊
💻 H
字号:
/* coreutils.h
 *   系统核心实用函数库声明文件.
 *
 * Copyright(c) 2007, Alex P.Wonder
 * phoenixwonder@gmail.com
 *
 */

#ifndef _COREUTILS_H
#define _COREUTILS_H

#ifndef BYTE
# include "OS_CPU.H"
#endif

#define NULL 0

/*************************************************/
/*************** 文本模式下的显示 ****************/
/*************************************************/

#define SCREEN_W  80
#define SCREEN_H	25

#define DISP_FGND_BLACK           0x00
#define DISP_FGND_BLUE            0x01
#define DISP_FGND_GREEN           0x02
#define DISP_FGND_CYAN            0x03
#define DISP_FGND_RED             0x04
#define DISP_FGND_PURPLE          0x05
#define DISP_FGND_BROWN           0x06
#define DISP_FGND_LIGHT_GRAY      0x07
#define DISP_FGND_DARK_GRAY       0x08
#define DISP_FGND_LIGHT_BLUE      0x09
#define DISP_FGND_LIGHT_GREEN     0x0A
#define DISP_FGND_LIGHT_CYAN      0x0B
#define DISP_FGND_LIGHT_RED       0x0C
#define DISP_FGND_LIGHT_PURPLE    0x0D
#define DISP_FGND_YELLOW          0x0E
#define DISP_FGND_WHITE           0x0F

#define DISP_BGND_BLACK           0x00
#define DISP_BGND_BLUE            0x10
#define DISP_BGND_GREEN           0x20
#define DISP_BGND_CYAN            0x30
#define DISP_BGND_RED             0x40
#define DISP_BGND_PURPLE          0x50
#define DISP_BGND_BROWN           0x60
#define DISP_BGND_LIGHT_GRAY      0x70

#define DISP_BLINK                0x80

#define PC_DispChar(x, y, c, color) \
						os_putchar((c), (int)(x), (int)(y), (int)(color))

#define PC_DispStr(x, y, str, color) \
						os_putstring((int)(x), (int)(y), (int)(color), (char *)(str))

#define PC_DispClrScr(color) \
						os_clrscr((int)(color))
						
#define IO_KB_CUR_IDX   0x3d4 /* 寄存器索引 */
#define IO_KB_CUR_DATA  0x3d5 /* 数据寄存器 */						

int  os_sprintf(char *out, const char *format, ...);
void os_putchar(char chr, int x, int y, int color);
void os_putstring(int x, int y, int color, char *str);
void os_clrscr(unsigned char color);
void os_gotoxy(int x, int y); /* 移动光标 */

/*************************************************/
/************ ucOS_II相关辅助例程 ****************/
/*************************************************/

OS_STK *init_task_stk(void (*task)(void *pd), void *pdata, OS_STK *ptos);

/*************************************************/
/************** C系统基本系统函数  ***************/
/*************************************************/

/* 内存块操作 */
void os_memset(void *buf, char chr, int n);
void os_memcpy(void *dest, const void *src, int n) ;

/* 随机数 */
int random(void);

/* I/O端口操作 */
#define outp(port, val) 		os_outb(port, val)
#define outpw(port, val) 		os_outw(port, val)
#define	inp(port)						os_inb(port)
#define inpw(port)					os_inw(port)

int os_outb(int port, unsigned char val);
int os_outw(int port, unsigned short val);
unsigned char os_inb(int port);
unsigned short os_inw(int port);

void enable_8259_irq();

void reset_cursor();

/*************************************************/
/************** x86中断(保护模式) ****************/
/*************************************************/

#define IRQ_BASE 0x20 /* 8259外部中断基地址 */

#define PC_VectSet(vectno, isr) os_setvect(vectno, isr)
#define PC_VectGet(vectno) os_getvect(vectno)

void os_setvect(int vectno, void (*isr)(void)); /* 设置中断处理程序 */
void *os_getvect(int vectno); /* 获得对应中断号上的处理程序地址 */

/*************************************************/
/****************** 8254定时器 *******************/
/*************************************************/
#define  TICK_T0_8254_CWR             0x43       /* 8254 PIT Control Word Register address.            */
#define  TICK_T0_8254_CTR0            0x40       /* 8254 PIT Timer 0 Register address.                 */
#define  TICK_T0_8254_CTR1            0x41       /* 8254 PIT Timer 1 Register address.                 */
#define  TICK_T0_8254_CTR2            0x42       /* 8254 PIT Timer 2 Register address.                 */

#define  TICK_T0_8254_CTR0_MODE3      0x36       /* 8254 PIT Binary Mode 3 for Counter 0 control word. */
#define  TICK_T0_8254_CTR2_MODE0      0xB0       /* 8254 PIT Binary Mode 0 for Counter 2 control word. */
#define  TICK_T0_8254_CTR2_LATCH      0x80       /* 8254 PIT Latch command control word                */

#define PC_SetTickRate(freq) os_set_tick(freq)

void os_set_tick(unsigned short freq);


/*************************************************/
/****************** 时间处理 *********************/
/*************************************************/
struct ftime {
  unsigned ft_tsec:5;	  /* 0-29, double to get real seconds */
  unsigned ft_min:6;	  /* 0-59 */
  unsigned ft_hour:5;	  /* 0-23 */
  unsigned ft_day:5;	  /* 1-31 */
  unsigned ft_month:4;	/* 1-12 */
  unsigned ft_year:7;	  /* since 1980 */
};

struct date {
  short da_year;
  char  da_day;
  char  da_mon;
};

struct time {
  unsigned char ti_min;
  unsigned char ti_hour;
  unsigned char ti_hund;
  unsigned char ti_sec;
};

/*
 		index   			Function
			00 			Current second for RTC
			01 			Alarm second
			02 			Current minute
			03 			Alarm minute
			04 			Current hour
			05 			Alarm hour
			06 			Current day of week(01=Sunday)
			07 			Current date of month
			08 			Current month
			09 			Current year(final two digits,eg:93)
 */
enum RtcRegs {
	rrSec = 0,
	rrAlmSec, 
	rrMin,
	rrAlmMin,
	rrHour,
	rrAlmHour,
	rrWeekday,
	rrMDay,
	rrMonth,
	rrYear	
};
 
unsigned char read_rtc_regs(int index); /* 读RTC时钟寄存器驱动 */

void os_getdate( struct date *dp); /* 读日期 */
void os_gettime( struct time *tp); /* 读时间 */

#endif /* #ifndef _COREUTILS_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -