<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > s3c2440的簡單BOOTLOADER

          s3c2440的簡單BOOTLOADER

          作者: 時間:2016-11-10 來源:網(wǎng)絡 收藏
          調試了很久終于成功啟動了板子,這個程序分兩個部分,一個是啟動代碼boot.s負責初始化硬件并拷貝前4k的程序到內存中執(zhí)行。另外一個是主程序文件main.c,main設置UART并使用串口循環(huán)輸出打印一個類似于shell的界面,可以接收命令,但暫時沒做命令解釋,功能還不全,主要是為了看看能不能實現(xiàn)基本的BOOTLOADER功能。

          本文引用地址:http://www.ex-cimer.com/article/201611/317181.htm

          mian.c
          #define BUF_SIZE 100
          #define GPHCON (*(volatile unsigned long *)0x56000070)
          #define GPHUP (*(volatile unsigned long *)0x56000078)

          #define ULCON0 (*(volatile unsigned long *)0x50000000)
          #define UCON0 (*(volatile unsigned long *)0x50000004)
          #define UFCON0 (*(volatile unsigned long *)0x50000008)
          #define UTRSTAT0 (*(volatile unsigned long *)0x50000010)
          #define UTXH0 (*(volatile unsigned long *)0x50000020)
          #define URXH0 (*(volatile unsigned long *)0x50000024)
          #define UBRDIV0 (*(volatile unsigned long *)0x50000028)

          void init_uart();
          void newline();
          void bzero(char *buf,int size);
          void do_cmd(char *s);
          void send_char(char ch);
          void send_msg(char *s);
          void get_msg(char *buf,int size);
          void print_shell();
          void delay(int i);

          void main(void)
          {
          init_uart();

          char msg[BUF_SIZE];

          while(1)
          {
          bzero(msg,BUF_SIZE);
          newline();
          print_shell();
          get_msg(msg,BUF_SIZE - 2);
          do_cmd(msg);
          // delay(4);
          }
          }


          void init_uart()
          {
          GPHCON &= ~(0xf0);
          GPHCON |= 0xa0;
          GPHUP = 0xc;

          ULCON0 = 0x03;
          UCON0 = 0x05;
          UFCON0 = 0;
          UBRDIV0 = 27;
          }

          void newline()
          {
          send_char(r);
          send_char(n);
          }

          void bzero(char *buf,int size)
          {
          int i;

          for(i = 0;i < size;i++)
          buf[i] = 0;
          }

          void send_char(char ch)
          {
          while(!((UTRSTAT0 >> 1) & 1));
          UTXH0 = ch;
          }

          void send_msg(char *s)
          {
          while(*s != 看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();