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 + -
显示快捷键?