FC2カウンター FPGAの部屋 soc-lm32のその後11(u-bootのコンフィギュレーションの書き換え3)
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

soc-lm32のその後11(u-bootのコンフィギュレーションの書き換え3)

今日はですます調で書きます。
最初に、”soc-lm32のその後10(u-bootのコンフィギュレーションの書き換え2)”のDDR SDRAMのアドレスは間違っていました。DDR SDRAMの容量は64Mbytes なので、16進のサイズにすると0x04000000です。よって、0x0b000000~はありえず、0x08000000~0x0bffffff になります。
あと、FATAL_ERRORともなったUARTのボーレートの設定ですが、前のままではボーレートが合いませんでした。よくよく見ると、intface.v の414行目の`define old_baud_generator のコメントアウトをはずすと、整数演算になって、ボーレートも合いました。
その次は、bootloaderの修正です。
LatticeMico32 の周辺UARTとTIMERをプロジェクトに入れたので、spike_hw.h のUARTの部分を以下のように修正しました。

/*************************************************************************** * UART0 */
#define UART_LSR_THRE    0x20    // THR Empty (送信バッファempty)(Line Status Register)
#define UART_LSR_DR        0x01    // Receiver data-ready(Line Status Register)
#define UART_LSR_FE        0x08    // Freming Error(Line Status Register)
#define UART_LSR_PE        0x04    // Parity Error(Line Status Register)
#define UART_LSR_OE        0x02    // OverRun Error(Line Status Register)

#define UART_LCR_WLS1_dl5    0x0        // WLS1 = 5bit(Data Length) (Line Controll Register)
#define UART_LCR_WLS1_dl6    0x1        // WLS1 = 6bit(Data Length) (Line Controll Register)
#define UART_LCR_WLS1_dl7    0x2        // WLS1 = 7bit(Data Length) (Line Controll Register)
#define UART_LCR_WLS1_dl8    0x3        // WLS1 = 8bit(Data Length) (Line Controll Register)
#define UART_LCR_STB_1        0x0        // STop Bit is 1bit.(Line Controll Register)
#define UART_LCR_STB_2        0x4        // STop Bit is 1.5 or 2 bits.(Line Controll Register)
#define UART_LCR_PEN_DIS    0x0        // Parity Disable (Line Controll Register)
#define UART_LCR_PEN_ENA    0x8        // Parity Enable (Line Controll Register)
#define UART_LCR_EPS_ODD    0x0        // Parity ODD (Line Controll Register)
#define UART_LCR_EPS_EVEN    0x10    // Parity Even (Line Controll Register)
#define UART_LCR_SP_DIS        0x0        // Stick Parity Disable (Line Controll Register)
#define UART_LCR_SP_ENA        0x20    // Stick Parity Disable (Line Controll Register)
#define UART_LCD_SB_DIS        0x0        // Send Break Disable
#define UART_LCD_SB_AS        0x40     // Assert Break

#define UART_

typedef struct {
   volatile uint32_t rxtx_data;
   volatile uint32_t interrupt_ena;
   volatile uint32_t interrupt_id;
   volatile uint32_t line_ctrl;
   volatile uint32_t modem_ctrl;
   volatile uint32_t line_status;
   volatile uint32_t modem_status;
   volatile uint32_t baud_rate_div;
} uart_t;


当然、SRAM_STARTも0x08000000 に修正しました。

spike_hw.c のuart_init, uart_getchar, uart_putchar を修正しました。

void uart_init()
{
    uart0->line_ctrl = UART_LCR_WLS1_dl8 | UART_LCR_STB_1 | UART_LCR_PEN_DIS | UART_LCR_EPS_ODD | UART_LCR_SP_DIS | UART_LCD_SB_DIS;
}

char uart_getchar()
{   
    while (! (uart0->line_status & UART_LSR_DR)) ;
    return uart0->rxtx_data;
}

void uart_putchar(char c)
{
    while (!(uart0->line_status & UART_LSR_THRE)) ;
    uart0->rxtx_data = c;
}


これで例によって、cygwin でコンパイルしてから、ISEでコンパイル、インプリメントしました。
Teratermを起動して、やってみました。最初はミスっていて、ボーレートがあっていませんでしたが、(最初に書いた原因です old_baud_generator )うまくプロンプトが出るようになりました。
これでu-bootをロードすることが出来ようになったと思いました。
ですが、m コマンドでDDR SDRAMテストもv コマンドでそのデータを見ても大丈夫なのですが、u コマンドでファイルからダウンロードしたときがおかしくなっています。
どうおかしいか確かめるために、8ワードだけのデータを作ってu コマンドで8ワードだけアップロードしてみました。
そうすると、最初の2ワードだけロードできているようなのですが、ほかは書き換わっていないようです。
U-boot_build_8_081115.png

エラーでも出ているんでしょうか?ちなみにボーレートを115200bps から半分にしても同様でした。
今日は飽きてきたので、この辺で終わりにします。
今度はLatticeMico32のdriversフォルダの下のライブラリを使って、動かしてみることにします。それで動かなければ、soc-lm32 のUARTを使うことにして、u-bootのUARTドライバの方を書き換えることにします。
  1. 2008年11月15日 19:34 |
  2. Spartan3E Starter Kit でマイコンを作る
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
http://marsee101.blog.fc2.com/tb.php/954-d0b0a6bc
この記事にトラックバックする(FC2ブログユーザー)