mac_xuyi 发表于 2011-12-25 16:03

sparc芯片验证

sparc芯片验证







最近在弄这个,都是sparc体系结构和汇编,用的是loeon3,grip等ip核,基于sparc体系结构。

贴一点uart验证的代码,很简单的sparc汇编。/* * apb_uart.S * *Created on: 2011-7-19 *      Author: xiaoyang */#include "fpga.h"#include "apb_uart.h".text.align 4.globl test_uart0!length of test string#define STR_LEN    8test_uart0:    save %sp, -128, %sp    nop!========================================!config!========================================    /*    uart->scaler = 1;    uart->status = 0;    uart->data = 0;    */    set UART0_BASE,%l0    !set uart0 scaler=1    add %l0,UART_SCALER,%l1    set 1,%l2    st %l2,[%l1]    !clear data    add %l0,UART_DATA,%l1    set 0,%l2    st %l2,[%l1]    !clear status bits,0x6    add %l0,UART_STATUS,%l1    set 0x6,%l2    st %l2,[%l1]    /*    uart->control = 0;    uart->control = ENABLE_TX;    uart->data = 0;    uart->data = 0;    uart->control = ENABLE_TX | ENABLE_RX;// | LOOP_BACK;    uart->control = ENABLE_TX | ENABLE_RX | LOOP_BACK;    for (i = 0; i < 100; i++) {      uart->data = 0;    }    for (i = 0; i < 100; i++) {      temp = uart->data;    }    */    !clear uart0 control register    add %l0,UART_CON,%l1    set 0,%l2    st %l2,[%l1]    add %l0,UART_CON,%l1    set ENABLE_TX,%l2    st %l2,[%l1]    !clear data    add %l0,UART_DATA,%l1    set 0,%l2    st %l2,[%l1]    !uart->control = ENABLE_TX | ENABLE_RX | LOOP_BACK,0x83    add %l0,UART_CON,%l1    set 0x83,%l2    st %l2,[%l1]    !clean data,initialize receiver holding register to prevent X in gate level simulation    set 0,%l2    add %l0,UART_DATA,%l1    nop0:    st %g0,[%l1]   !set uart_data=0    ld [%l1],%l3   !temp = uart_data    add %l2,1,%l2   !if(i++ < 100) goto 0b;    cmp %l2,8    bne 0b    nop!========================================!apb uart!========================================    /*    for(i = 0; i < 8; i++ ){      uart_data = string    }    %l0:uart base    %l1:uart status address    %l2:uart data address(TX or Rx)    %l3:uart status value    %l4:uart data value(Rx or TX)    %l5:i    %l6:tmp value    %l7:char address to send    */    set 0,%l2    add %l0,UART_STATUS,%l1    add %l0,UART_DATA,%l2!    set string,%l7    set 0,%l5    nop1:    !if %l2>STR_LEN,get out of loop    cmp %l5,STR_LEN    bg 4f    nop    add %l5,1,%l5    ld [%l1],%l3    !mov %l3,%l62:    !check RF bit    and %l3,0x400,%l6    cmp %l6,0x400    bne 3f    nop    !RF is set,recieve data    !ld [%l2],%l4    !ba 1b;    !nop    !(Reciever FIFO is Full)    ld [%l2],%l4    mov %l4, %o0                        !recieve suc(data)    call show    nop    ba 1b;    nop3:    !check TF bit(Transmit FIFO is Full)    and %l3,0x200,%l6    cmp %l6,0x200    !Transmit FIFO is Full    be 1b    nop    !transmit data:string!    add %l7,8,%l7!    ld [%l7],%l4!    st %l4,[%l2]    set 0x55,%l4    st %l4,[%l2]    ba 1b;    nop4:    !disable uart0    !uart->control = ENABLE_TX | ENABLE_RX | LOOP_BACK,0x83    add %l0,UART_CON,%l1    st %g0,[%l1]    !Finish    ret    restore!========================================!the data section!========================================!      .section   ".data"!string:    .asciz      "1234567890abc"!========================================!end of file!========================================
复制代码

小鬼萌萌控 发表于 2012-01-04 14:58

谢谢分享

hexilanlan 发表于 2012-01-04 18:09

:dizzy:
页: [1]
查看完整版本: sparc芯片验证