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

📄 main.c

📁 完整的Bell实验室的嵌入式文件系统TFS
💻 C
字号:
#include "monlib.h"#include "stddefs.h"intgetvbr(){    __asm__("stc vbr,r0");}intgetsr(){    __asm__("stc sr,r0");}putsr(sr)ulong sr;{    __asm__("mov.l @r14,r0");    __asm__("ldc r0,sr");}/* Compare Match Timer stuff... */#define CPUFREQ 28636363/* See page 529 (chap 16) of 7040 Series Hardware manual). */#define CMSTR   0xffff83d0#define CMCSR0  0xffff83d2#define CMCNT0  0xffff83d4#define CMCOR0  0xffff83d6#define CMCSR1  0xffff83d8#define CMCNT1  0xffff83da#define CMCOR1  0xffff83dc#define STARTTMR0()     (*(unsigned short *)CMSTR |= 0x0001)#define STOPTMR0()      (*(unsigned short *)CMSTR &= ~0x0001)#define STARTTMR1()     (*(unsigned short *)CMSTR |= 0x0002)#define STOPTMR1()      (*(unsigned short *)CMSTR &= ~0x0002)#define CLEARCMF0()     (*(unsigned short *)CMCSR0 &= ~0x0080)#define CLEARCMF1()     (*(unsigned short *)CMCSR1 &= ~0x0080)#define GETCMF0()       (*(unsigned short *)CMCSR0 & 0x0080)#define GETCMF1()       (*(unsigned short *)CMCSR1 & 0x0080)#define ENABLECMI0()    (*(unsigned short *)CMCSR0 |= 0x0040)#define ENABLECMI1()    (*(unsigned short *)CMCSR1 |= 0x0040)#define DISABLECMI0()   (*(unsigned short *)CMCSR0 &= ~0x0040)#define DISABLECMI1()   (*(unsigned short *)CMCSR1 &= ~0x0040)#define GETCMCNT0()     (*(unsigned short *)CMCNT0)#define GETCMCNT1()     (*(unsigned short *)CMCNT1)#define SETCMCOR0(n)    (*(unsigned short *)CMCOR0 = n)#define SETCMCOR1(n)    (*(unsigned short *)CMCOR1 = n)#define CLEARCKS0()     (*(unsigned short *)CMCSR0 &= ~0x0003)#define CLEARCKS1()     (*(unsigned short *)CMCSR1 &= ~0x0003)#define DIVBY8CKS0()    (*(unsigned short *)CMCSR0 |= 0x0000)#define DIVBY32CKS0()   (*(unsigned short *)CMCSR0 |= 0x0001)#define DIVBY128CKS0()  (*(unsigned short *)CMCSR0 |= 0x0002)#define DIVBY512CKS0()  (*(unsigned short *)CMCSR0 |= 0x0003)#define DIVBY8CKS1()    (*(unsigned short *)CMCSR1 |= 0x0000)#define DIVBY32CKS1()   (*(unsigned short *)CMCSR1 |= 0x0001)#define DIVBY128CKS1()  (*(unsigned short *)CMCSR1 |= 0x0002)#define DIVBY512CKS1()  (*(unsigned short *)CMCSR1 |= 0x0003)/* Interrupt registers: (pg 79) */#define IPRA    0xffff8348#define IPRB    0xffff834a#define IPRC    0xffff834c#define IPRD    0xffff834e#define IPRE    0xffff8350#define IPRF    0xffff8352#define IPRG    0xffff8354#define IPRH    0xffff8356#define ICR     0xffff8358#define ISR     0xffff835aint Systick;voidCtick(){    CLEARCMF0();    Systick++;}intmain(int argc,char *argv[]){    register int zero, one, two, three, four, five, six, seven, eight;    register int nine, ten, eleven, twelve, thirteen, fourteen, fifteen;    int i, sr, *vbr, osystick;    extern  int tick();    for(i=0;i<argc;i++)        mon_printf("argv[%d] = %s\n",i,argv[i]);    if (mon_getenv("ABC"))        mon_cprintf("ABC = %s\n",mon_getenv("ABC"));    else        mon_printf("Shellvar ABC not set.\n");    zero = 0;    one = 1;    two = 2;    three = 3;    four = 4;    five = 5;    six = 6;    seven = 7;    eight = 8;    nine = 9;    ten = 10;    eleven = 11;    twelve = 12;    thirteen = 13;    fourteen = 14;    fifteen = 15;    CLEARCMF0();    CLEARCKS0();    DIVBY512CKS0();         /* Divide 28636363hz clock by 512 to get */                            /* a 55930hz tick. */    SETCMCOR0(CPUFREQ/512); /* Set CMCOR0 to 55930 to get a 1hz tick rate. */    STARTTMR0();            /* Run timer in polled mode and see that the */    for(i=0;i<3;) {         /* dots come out at a rate of 1 per second.  */        if (GETCMF0()) {            i++;            mon_printf(".");            CLEARCMF0();        }    }    STOPTMR0();    /* Set up the proper vector... */    vbr = (int *)getvbr();    mon_printf("VBR=0x%x\n",vbr);    vbr[144] = (int)tick;    mon_printf("vbr[144] = 0x%x\n",vbr[144]);    /* Lower interrupt level... */    sr = getsr();    sr &= ~0x000000e0;    putsr(sr);    /* Assign interrupt level of CMT0 timer... */    *(unsigned short *)IPRG = 0x0080;    osystick = Systick = 0;    STARTTMR0();    ENABLECMI0();    while(1) {        if ((zero != 0) || (one != 1) || (two != 2) || (three != 3) ||           (four != 4) || (five != 5) || (six != 6) || (seven != 7) ||           (eight != 8) || (nine != 9) || (ten != 10) || (eleven != 11) ||           (twelve != 12) || (thirteen != 13) ||           (fourteen != 14) || (fifteen != 15)) {            mon_printf("BUMMER!\n");            mon_printf("0x%x\n",zero);            mon_printf("0x%x\n",one);            mon_printf("0x%x\n",two);            mon_printf("0x%x\n",three);            mon_printf("0x%x\n",four);            mon_printf("0x%x\n",five);            mon_printf("0x%x\n",six);            mon_printf("0x%x\n",seven);            mon_printf("0x%x\n",eight);            mon_printf("0x%x\n",nine);            mon_printf("0x%x\n",ten);            mon_printf("0x%x\n",eleven);            mon_printf("0x%x\n",twelve);            mon_printf("0x%x\n",thirteen);            mon_printf("0x%x\n",fourteen);            mon_printf("0x%x\n",fifteen);            break;        }        if (osystick != Systick) {            mon_putchar('!');            osystick = Systick;        }        if (mon_gotachar())            break;    }    DISABLECMI0();    mon_printf("\n");    return(0);}

⌨️ 快捷键说明

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