This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

DSP5509A用EMIF接口扩展外设时,地址是如何映射的

Other Parts Discussed in Thread: SN74HC245

我是初学DSP新人一枚,在用5509A做键盘操控数码管显示实验时指导书上写的是键盘等外设扩展到了CE3空间,然后给出了键盘地址,但是我不清楚这个地址是怎么来的,请各位为我解惑

下面是键盘部分的电路图与实验代码

代码:

// 定义指示灯寄存器地址和寄存器类型
#define LBDS1 (*((unsigned int *)0x601000))
#define keyboard (*((unsigned int *)0x600400))    
#define GPIO_SEL (*((unsigned int *)0x400000))

  • keyboard是直接通过emif与5509连接的吗?能否贴一下相关的主程序。
  • 您好,谢谢您的回复,主程序如下:
    //keyboard code
    #include "myapp.h"
    #include <csl.h>
    #include <csl_pll.h>
    #include <csl_chip.h>
    #include <csl_gpio.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <csl_irq.h>
    #include <csl_mcbsp.h>

    #define ST1_55 *(int *)0x03
    #define ST3_55 *(int *)0x04
    // 定义指示灯寄存器地址和寄存器类型
    #define LBDS1 (*((unsigned int *)0x601000))
    #define keyboard (*((unsigned int *)0x600400))
    #define GPIO_SEL (*((unsigned int *)0x400000))
    // 子程序接口
    void Delay(unsigned int nDelay); // 延时子程序

    unsigned int time=0;
    unsigned int temp_key,temp_key1;
    unsigned int keycode[100];

    main()
    {
    // unsigned int uLED[5]={0,1,2,4,0xFF}; // 控制字,逐位置1: 0001B 0010B 0100B 1000B
    unsigned int uLED[10]={0x0db,0x50,0x6b,0x73,0x0f0,0x0b3,0x0bb,0x51,0x0fb,0x0f3};

    CLK_init(); // 初始化DSP运行时钟
    ST3_55 = ST3_55|0x0040; //定义CE3的映射,禁止片内ROM
    SDRAM_init(); // 初始化EMIF接口

    GPIO_SEL=0;

    while ( 1 )
    {
    temp_key=keyboard;
    temp_key=temp_key & 0x00ff;
    if(0xff!=temp_key)
    {
    temp_key1=temp_key;
    Delay(20);
    temp_key=keyboard;
    temp_key=temp_key & 0x00ff;
    if(temp_key == temp_key1)
    {
    //time++;
    //keycode[time]=temp_key;

    switch(temp_key)
    {
    case 0x0fb:
    LBDS1=0x0ff-uLED[2]; //s202
    break;
    case 0x0f7:
    LBDS1=0x0ff-uLED[3];//
    break;
    case 0x0ef:
    LBDS1=0x0ff-uLED[4];
    break;
    case 0x0df:
    LBDS1=0x0ff-uLED[5];
    break;
    case 0x0bf:
    LBDS1=0x0ff-uLED[6];
    break;
    case 0x07f:
    LBDS1=0x0ff-uLED[7];
    break;
    case 0x0fd:
    LBDS1=0x0ff-uLED[1];
    break;
    case 0x0fe:
    LBDS1=0x0ff-uLED[0];
    break;
    default:break;
    }

    }
    }
    }
    }

    void Delay(unsigned int nDelay)
    {
    unsigned int ii,jj,kk=0;
    for ( ii=0;ii<nDelay;ii++ )
    {
    for ( jj=0;jj<2048;jj++ )
    {
    kk++;
    }
    }
    }

    在原理图里键盘是连在SN74HC245上的,当CE3与A11均为1的时候SN74HC245片选信号有效
  • 这个地址是访问的data spce,是以word address来访问的,所以对应的CE3的空间是从0x600000开始的。看一下这个这个链接。
    www.ti.com/.../spru371f.pdf
    手册上3.1.4章节memory map部分也看一下。