• 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
    !========================================

      模拟波形:

  • 相关阅读:
    自动支持图片webp格式压缩,图片服务器升级webserver
    长江商学院介绍及名人校友名单
    恒大许家印靠斗着地主,当上首富
    用GitLab搭建自己的私有GitHub
    vim快速定位到某一行的几种方法和显示行号,定位匹配字符串,显示当前行信息的命令
    mysql数据库表上百万记录优化思路杂谈
    Java打印输出数组的三种方式:传统的for循环方式,for each循环,利用Arrays类中的toString方法
    个人快速成长之系统方法,最小化成长系统
    程序员应该了解的常见软件开发定律
    用python修改文件内容修改txt内容的3种方法
  • 原文地址:https://www.cnblogs.com/yixiaoyang/p/2114971.html
Copyright © 2020-2023  润新知