console.c

来自「msc1201 编程4」· C语言 代码 · 共 175 行

C
175
字号
#include <REG1210.H>
#include "mvp.h"
//send FIFO when FIFO !MT (tail!=hd) and SBUF MT (TI==1)
// FIFOMT--|__________xxx ____|----
// txmt  -|______________ _________
// TI    ___________|-|__ ____|-|__
// TI-ISR            ^         ^
//sbufmt=1 when FIFO MT (tail==hd) and SBUF MT (TI==1)
// FIFOMT---------------- ------------
// txmt  ------|______|-- _________|--
// TI    ___________|-|__ _______|-|__
// TI-ISR  frm start ^  last FIFO ^
void serial0_isr(void) interrupt 4
{
	if (RI) {
		*rx_hdptr=SBUF0;
		if (!rxfull) rx_hdptr++; 
		if (rx_hdptr==RX_END) rx_hdptr=RX_BEG;
		if (rx_hdptr==rx_tailptr) {rxfull=1;}
		rxmt=0; 
		RI=0; 
	}
	if (TI) {
		if (tx_tailptr!=tx_hdptr || txfull){ // Send FIFO
			SBUF0=*tx_tailptr;
			tx_tailptr++; 
			if (tx_tailptr==TX_END) tx_tailptr=TX_BEG;
			txfull=0;
		} else txmt=1; // FIFO empty
		TI=0;
	}
}
unsigned char rx_byte(void)
{	unsigned char c;
	while (rxmt){;} // wait for a byte
	ES0=0;	
	c=*rx_tailptr;
	rx_tailptr++;
	rxfull=0; 
	if (rx_tailptr==RX_END) rx_tailptr=RX_BEG;
	if (rx_tailptr==rx_hdptr) {rxmt=1;}
	ES0=1;
	return(c);
}
void tx_byte(unsigned char c)
{
	while (txfull){;}
	ES0=0;
	if (txmt) {//fill sbuf before FIFO
		txmt=0;
		SBUF0=c;
	} else {
		*tx_hdptr=c;
		tx_hdptr++;
		if (tx_hdptr==TX_END) tx_hdptr=TX_BEG;		
		if (tx_hdptr==tx_tailptr) txfull=1;
	}
	ES0=1;
}
void putok(char pass_fail)
{
	if (pass_fail){
    	putspace1();
		tx_byte('x');
	} else {
    	putspace1();
		tx_byte('o');
		tx_byte('k');
	}
}
void putcr(void)
{
	tx_byte(0x0d);
	tx_byte(0x0a);
}
void putprompt(void)
{
	putcr();
 	tx_byte('>');
}
void putstr(char code * data msg)
{
	while (*msg != 0) {
		tx_byte((unsigned char) *msg);
		if( *msg=='\n') tx_byte('\r');
		msg++; 
	}
}
void alarm(void)
{
		while(1){beep(500,100); beep(300,100);}
}
void beep(unsigned int i, unsigned int d)
{
	while (t1!=0){;} 	// wait until last tone is done
	t1=d;
   PWMCON=0;		// select PWM Period
   PWM=i;			// Set TonePeriod 1us*i*2 
   PWMCON=0x10;	// select PWM Duty
   PWM=i>>1;
   PWMCON=0x11;	// PWM
}
void nokey(void)
{
		while(high(k1) || high(k2) || high(k3)){}
}
unsigned char high(unsigned char k)
{
	if (k & 0x80) return(0xff);
	else return (0);           
}
// c=a display i, i->mem
// c=r display mem
// c=> display mem+pg, mem+pg->mem
// c=< display mem-pg, mem-pg->mem
void display(unsigned char cpu, unsigned char c,unsigned int input)
{	unsigned char j,k,h,l;
	unsigned int i;
	if (c=='I') {// Intel Hex dump
//@@@		i=0; bytecount=0x10; linetype=0; checksum=0;
		putcr();
		for (j=0;j<8;j++){
			tx_hex(i>>8); tx_hex(i);
			for (k=0;k<16;k++) {
				putspace1(); tx_hex(fpm(cpu|FRD,i,0)); 
				i++;
			}
			putcr();
		}		
	}	
	if (c=='a') {
		i=input;// & 0xfff0;	
		EAI=0; EA=0; write_flash_chk(&(nvnp->memaddrh),i>>8,FDM);
		write_flash_chk(&(nvnp->memaddrl),i,FDM);EAI=1; EA=1;
		updatenv();
	}	
	if (c=='r') i=((unsigned int)nvcp->memaddrh)<<8 | nvcp->memaddrl;
	if (c=='>') {
		i=(((unsigned int)nvcp->memaddrh)<<8 |nvcp->memaddrl)+128;
		EA=0; EAI=0; write_flash_chk(&(nvnp->memaddrh),i>>8,FDM);
		write_flash_chk(&(nvnp->memaddrl),i,FDM);EAI=1; EA=1;
		updatenv();
	}	
	if (c=='<') {
		i=(((unsigned int)nvcp->memaddrh)<<8 | nvcp->memaddrl)-128;
		EA=0; EAI=0; write_flash_chk(&(nvnp->memaddrh),i>>8,FDM);
		write_flash_chk(&(nvnp->memaddrl),i,FDM);EAI=1; EA=1;
		updatenv();
	}	
	putcr();
	for (j=0;j<8;j++){
		tx_hex(i>>8); tx_hex(i);
		for (k=0;k<16;k++) {
			putspace1(); tx_hex(fpm(cpu|FRD,i,0)); 
			i++;
		}
		putcr();
	}		
}
void screen(void)
{ unsigned char i;
	version();
	putstr("Selection: A)Buffer S)Target\n"); 
	putstr("Operation: <)PgUp   >)PgDwn  r)Refresh annnn)addr          I)Target Info\n"); 
	putstr("           C)copy   B)blank  V)verify  K)erase X)secure    FWnnnnyy)flash write\n\n");
	putstr("SC (AC):copy buffer to target (target to buffer)\n");
	putstr("SK (AK):erase target (buffer)\n");
	putstr("SX (AX):secure target (buffer)\n");
	putstr("SB (AB):blank chk target (buffer)\n");
	putstr("S  (A) :host download hex to target (buffer)\n\n");
	putstr("<key1> :copy buffer to target\n");
	putstr("<key2> :copy target to buffer\n");
	putstr("<key3> :secure target\n");
} 

⌨️ 快捷键说明

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