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 8

test_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
nop

0:
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[i]
}

%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
nop
1:
!if %l2>STR_LEN,get out of loop
cmp
%l5,STR_LEN
bg 4f
nop

add
%l5,1,%l5
ld [
%l1],%l3
!mov %l3,%l6
2:
!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;
nop
3:
!check TF bit(Transmit FIFO is Full)
and
%l3,0x200,%l6
cmp
%l6,0x200

!Transmit FIFO is Full
be 1b
nop

!transmit data:string[i]
! add %l7,8,%l7
! ld [%l7],%l4
! st %l4,[%l2]
set 0x55,%l4
st
%l4,[%l2]
ba 1b;
nop
4:
!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
!========================================

  模拟波形:

原文地址:https://www.cnblogs.com/yixiaoyang/p/2114971.html