5509A 常用函数

// 定义指示灯控制寄存器地址和寄存器类型

#define LBDS (*((unsigned int *)0x400001))

// 定义拨码开关控制寄存器地址和寄存器类型

#define DIPS (*(unsigned int *)0x400002)

 

 

CLK_init();//  初始化DSP运行时钟

void CLK_init()

{

   ioport unsigned int *clkmd;

   clkmd=(unsigned int *)0x1c00;

   *clkmd =0x21f3; // 晶振12Hz,9Hz=0x21f3;// 144MHz=0x2613

}

 

SDRAM_init(); // 初始化EMIF接口

void SDRAM_init( void )

{      

    ioport unsigned int *ebsr  =(unsigned int *)0x6c00;

    ioport unsigned int *egcr  =(unsigned int *)0x800;

    ioport unsigned int *emirst=(unsigned int *)0x801;

    //ioport unsigned int *emibe =(unsigned int *)0x802;  

    ioport unsigned int *ce01  =(unsigned int *)0x803;

    //ioport unsigned int *ce02  =(unsigned int *)0x804;

    //ioport unsigned int *ce03  =(unsigned int *)0x805;

    ioport unsigned int *ce11  =(unsigned int *)0x806;

    //ioport unsigned int *ce12  =(unsigned int *)0x807;

    //ioport unsigned int *ce13  =(unsigned int *)0x808;

    ioport unsigned int *ce21  =(unsigned int *)0x809;

    //ioport unsigned int *ce22  =(unsigned int *)0x80A;

    //ioport unsigned int *ce23  =(unsigned int *)0x80B;

    ioport unsigned int *ce31  =(unsigned int *)0x80C;

    //ioport unsigned int *ce32  =(unsigned int *)0x80D;

    //ioport unsigned int *ce33  =(unsigned int *)0x80E;

    ioport unsigned int *sdc1  =(unsigned int *)0x80F;

    //ioport unsigned int *sdper =(unsigned int *)0x810;

    //ioport unsigned int *sdcnt =(unsigned int *)0x811;

    ioport unsigned int *init  =(unsigned int *)0x812;

    ioport unsigned int *sdc2  =(unsigned int *)0x813;

    *ebsr   = 0x221;

    *egcr   = 0x220;

    *egcr   = 0x220;

    *ce01   = 0x3000;

    *ce11   = 0x1fff;

    *ce21   = 0x1fff;

    *ce31   = 0x1fff;

    *emirst = 0;

    *sdc1   = 0x5958;

    *sdc2   = 0x38F;

    *init   = 0;

}     

 

 

void Delay(unsigned int nDelay);//延时函数

void Delay(unsigned int nDelay)

{

int ii,jj,kk=0;

for ( ii=0;ii<nDelay;ii++ )

{

for ( jj=0;jj<1024;jj++ )

{

kk++;

}

}

}

 

#include "C5509.h" //其包含了寄存器的地址,像IVPD等,在有的程序中要包含的头文件

 

void TIMER_init(void); //定时器初始化函数

void TIMER_init(void)

{

    ioport unsigned int *tim0; 

    ioport unsigned int *prd0; 

    ioport unsigned int *tcr0; 

    ioport unsigned int *prsc0;  

tim0  =  (unsigned int *)0x1000;

prd0  =  (unsigned int *)0x1001;

tcr0  =  (unsigned int *)0x1002;

prsc0 =  (unsigned int *)0x1003;

   *tcr0 = 0x04f0;

   *tim0 = 0;

   *prd0 = 0x0ffff;

   *prsc0 = 2;

   *tcr0 = 0x00e0;

}

 

 

 

 

 

void INTR_init( void );//中断初始化函数

void INTR_init( void )

{

IVPD=0xd0;

IVPH=0xd0;

IER0=0x10;

DBIER0 =0x10;

IFR0=0xffff;

asm(" BCLR INTM");

 

}

 

 


Cmd 文件

-w

-stack 500

-sysstack 500

-l rts55x.lib

 

MEMORY 

{

    DARAM: o=0x100, l=0x7f00

    VECT :  o=0x8000, l=0x100

    DARAM2: o=0x8100, l=0x7f00

    SARAM:  o=0x10000, l=0x30000

    SDRAM: o=0x40000, l=0x3e0000

}

 

SECTIONS

{

    .text:    {} > DARAM 

    .vectors: {} > VECT 

    .trcinit: {} > DARAM 

    .gblinit: {} > DARAM 

     frt:     {} > DARAM 

    

    .cinit:   {} > DARAM 

    .pinit:   {} > DARAM 

    .sysinit: {} > DARAM 

    .bss:     {} > DARAM2 

    .far:     {} > DARAM2 

    .const:   {} > DARAM2 

    .switch:  {} > DARAM2 

    .sysmem:  {} > DARAM2 

    .cio:     {} > DARAM2 

    .MEM$obj: {} > DARAM2 

    .sysheap: {} > DARAM2 

    .sysstack {} > DARAM2 

    .stack:   {} > DARAM2 

    

}

 

 

    


 

以下2页是中断向量表程序  保存为.asm形式

   .sect ".vectors"

 

        .ref _c_int00           ; C entry point

 

        .if (.MNEMONIC)

 

rsv:                            ; reset vector

        B _c_int00                              ; branch to C entry point

        NOP

        .align 8

nmi:

.loop 8

nop

.endloop

int0:

.loop 8

nop

.endloop

int2:

.loop 8

nop

.endloop

.ref _Timer

tint:

B _Timer

nop

.align 8

    b $

    nop

    .align 8

    b $

    nop

    .align 8

b $

    nop

    .align 8

    b $

    nop

    .align 8

    b $

    nop

    .align 8

    b $

    nop

    .align 8

    b $

    nop

    .align 8

    b $

    nop

    .align 8

    b $

    nop

    .align 8

    b $

    nop

    .align 8

    b $

    nop

    .align 8

    b $

    nop

    .align 8

    b $

    nop

    .align 8

    b $

    nop

    .align 8

    b $

    nop

    .align 8

        .else

 

rsv:                            ; reset vector

        goto _c_int00                           ; branch to C entry point

        NOP

        .align 8

 

 

        .endif

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值