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!========================================
复制代码 谢谢分享 :dizzy:
页:
[1]