文档库 最新最全的文档下载
当前位置:文档库 › DSP实习数码管实验程序

DSP实习数码管实验程序

-w
-stack 500
-sysstack 500
-l rts55x.lib
MEMORY
{
DARAM:o=0x100,l=0x07f00
VECT: o=0x0d000,l=0x100
DARAM2:o=0x0d000,l=0x100
SRAM:o=0x10000,l=0x30000
SDRAM:o=0x40000,l=0x3e0000
}
SECTIONS
{
.text: {} > DRAM
.vectors: {} > VECT
.trcinit: {} > DARAM
.gblinit: {} > DARAM
frt: {} > DARAM
.cinit: {} > DARAM
.pinit: {} > DARAM
.sysinit: {} > DRAM
.bss: {} DARAM2
.far: {} > DARAM2
.const: {} DARAM
.switch: {} > DARAM
.sysmem: {} > DARAM
.cio: {} >DARAM
.MEM$obj: {} > DARAM
.sysheap: {} > DARAM
.sysstack {} > DARAM
.stack: {} > DARAM
}

func.h
void SDRAM_init( void );
void PLL_Init(int freq);
void Delay_ms(unsigned int nDelay);
void display_led2(unsigned int bit,unsigned int seg,unsigned int dotbit);

myapp.h
#include "func.h"

util.h
#define DSP_CLKIN 20
#define NULLLOOP_CLK 20
typedef struct {
int freq;
int clkin;
int pllmult;
int plldiv;
int clksperusec;
int nulloopclk;
} DSPCLK;
extern DSPCLK dspclk;

sdram_init.c
#include "myapp.h"
void SDRAM_init(void)
{
ioport unsigned int *ebsr =(unsigned in *)0x6c00;
ioport unsigned int *egcr =(unsigned in *)0x800;
ioport unsigned int *emirst =(unsigned in *)0x801;
ioport unsigned int *ce01 =(unsigned in *)0x803;
ioport unsigned int *ce11 =(unsigned in *)0x806;
ioport unsigned int *ce21 =(unsigned in *)0x809;
ioport unsigned int *ce31 =(unsigned in *)0x80C;
ioport unsigned int *sdc1 =(unsigned in *)0x80F;
ioport unsigned int *init =(unsigned in *)0x812;
ioport unsigned int *sdc2 =(unsigned in *)0x813;
*ebsr =0x221;
*egcr =0x220;
*egcr =0x220;
*ce01 =0x3000;
*ce11 =0x1fff;
*ce21 =0x1fff;
*ce31 =0x1fff;
*emirst =0;
*sdc1 =0x5958;
sdc2 =0x38F;
*init =0;
}

util.c
#include "util.h"
DSPCLK dspclk;
void PLL_Init(int freq)
{
int i;
DSPCLK dspclk;
ioport unsigned int *clkmd;
ioport unsigned int *sysr;
clkmd=(unsigned int *)0xlc00;
sysr=(unsigned int *)0x07fd;
dspclk.clkin = DSP_CLKIN;
dspclk.pllmult = (ferq *2)/dspclk.clkin;
if(dspclk.pllmult>= 32)dspclk.pllmult=31;
*clkmd &+ ~0x10;
for(i=*clkmd&1; i!=0 ;i=*clkmd&1);
*clkmd &= ~0x10;
for(i= *clkmd&1; i!= 0 ;i=*clkmd&1);
*clkmd &= ~0x4000;
*clkmd |= 0x2000;
*clkmd &= ~0xc;
*clkmd |= 4;
*clkmd &= ~0x60;
*clkmd |= 0x20;
*clkmd &= ~0x0f80;
*clkmd |= dspclk.pllmult<<7;
*clkmd &=0x10;
for(i=0;i<10;i++);
for(i=*clkmd&1; i!=1 ;i=* *clkmd&1);
*sysr=1;
}

shunaguan.c
#define LED2 (*((unsigned int *)0x020002))
void Delay_ms(unsigned int nDelay);
void display_led2(unsigned int bit , unsigned int seg, unsigned int dotbit);
main()
{
unsigned int display_buffer[16]={0,1,2,3,4,5,6,7,8,9,0xa,0xb,0xc,0xd,0xe,0xf};
unsigned int ledbit,dot=0;
PLL_Init(100);
SDRAM_init();
while(1)
{
for(ledbit=8;ledbit>0;ledbit--)
{

display_led2(ledbit,display_buffer[8-led

bit],dot);
Delay_ms(1000);
}
for(ledbit=8;ledbit>0;ledbit--)
{
display_led2(ledbit,display_buffer[16-ledbit],dot);
Delay_ms(1000);
}
}
}
void Delay_ms(unsigned int nDelay)
{
int ii,jj;
for(ii=0;ii{
for(jj=0;jj<8500;jj++)
{
}
}
}
void display_led2(unsigned int bit,unsigned int seg,unsigned
int dotbit)
{
unsigned int temp=0x0;
if(dotbit==bit)
{
temp=0x80;
}
switch(bit){
case 8:bit=0xfe;break;
case 7:bit=0xfd;break;
case 6:bit=0xfb;break;
case 5:bit=0xf7;break;
case 4:bit=0xef;break;
case 3:bit=0xdf;break;
case 2:bit=0xbf;break;
case 1:bit=0x7f;break;
}
switch(seg){
case 0:seg=0x3f;break;
case 1:seg=0x06;break;
case 2:seg=0x5b;break;
case 3:seg=0x4f;break;
case 4:seg=0x66;break;
case 5:seg=0x6d;break;
case 6:seg=0x7d;break;
case 7:seg=0x07;break;
case 8:seg=0x7f;break;
case 9:seg=0x6f;break;
case 0xa:seg=0x77;break;
case 0xb:seg=0x7C;break;
case 0xc:seg=0x39;break;
case 0xd:seg=0x5E;break;
case 0xe:seg=0x79;break;
case 0xf:seg=0x71;break;
}
seg=seg^temp;
seg=seg<<8;
temp=seg;
LED2=seg|bit;
Delay_ms(1);
}



相关文档
相关文档 最新文档