|  | 
8#
 
 
 楼主|
发表于 2016-1-15 16:53:55
|
只看该作者 
| 为了感谢老大,也是为了和兄弟们共享,下面给出调试成功的代码 复制代码/*              按键 EDMA3 事件触发测试                                     */
#include "TL6748.h"                 // 创龙 DSP6748 开发板相关声明
#include "hw_types.h"               // 宏命令
#include "hw_syscfg0_C6748.h"       // 系统配置模块寄存器
#include "soc_C6748.h"              // DSP C6748 外设寄存器
#include "psc.h"                    // 电源与睡眠控制宏及设备抽象层函数声明
#include "gpio.h"                   // 通用输入输出口宏及设备抽象层函数声明
#include "interrupt.h"              // DSP C6748 中断相关应用程序接口函数声明及系统事件号定义
#include "edma.h"                   // 直接内存访问宏及设备抽象层函数声明
#include "edma_event.h"             // 直接内存访问事件
// 软件断点
#define SW_BREAKPOINT     asm(" SWBP 0 ");
volatile char StringScr[] = "Tronlong GPIO KEY EDMA3 Application......\n\r";
volatile char StringDst[64];
// EDMA3 配置
unsigned int chType     = EDMA3_CHANNEL_TYPE_DMA;
unsigned int chNum      = EDMA3_CHA_GPIO_BNKINT6;//my_modify,EDMA3_CHA_GPIO_BNKINT0
unsigned int tccNum     = EDMA3_CHA_GPIO_BNKINT6;//my_modify,EDMA3_CHA_GPIO_BNKINT0
unsigned int trigMode   = EDMA3_TRIG_MODE_EVENT;
unsigned int evtQ       = 0;
void PSCInit(void)
{
        // 使能 GPIO 模块
        // 对相应外设模块的使能也可以在 BootLoader 中完成
    PSCModuleControl(SOC_PSC_0_REGS, HW_PSC_GPIO, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);//my_modify,SOC_PSC_1_REGS,unconcerned
        // 使能 EDMA3CC_0
    PSCModuleControl(SOC_PSC_0_REGS, HW_PSC_CC1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);//my_modify,HW_PSC_TC0,unconcerned
    // 使能 EDMA3TC_0
    PSCModuleControl(SOC_PSC_0_REGS, HW_PSC_TC1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);//my_modify,HW_PSC_CC0,unconcerned
}
void InterruptInit(void)
{
        // 初始化 DSP 中断控制器
        IntDSPINTCInit();
        // 使能 DSP 全局中断
        IntGlobalEnable();
}
void GPIOBankPinMuxSet(void)
{
        // 配置相应的 GPIO 口功能为普通输入输出口
        // 核心板 LED
        GPIOBank6Pin13PinMuxSetup();
        // 底板按键
        //GPIOBank0Pin6PinMuxSetup();
        //GPIOBank1Pin15PinMuxSetup();
        GPIOBank6Pin1PinMuxSetup();//my_modify
}
void GPIOBankPinInit(void)
{
        // 核心板 LED
    GPIODirModeSet(SOC_GPIO_0_REGS, 110, GPIO_DIR_OUTPUT);  // GPIO6[13]
        // 底板按键
    //GPIODirModeSet(SOC_GPIO_0_REGS, 7, GPIO_DIR_INPUT);     // USER0 KEY GPIO0[6]
    //GPIODirModeSet(SOC_GPIO_0_REGS, 32, GPIO_DIR_INPUT);    // USER1 KEY GPIO1[15]
    GPIODirModeSet(SOC_GPIO_0_REGS, 98, GPIO_DIR_INPUT);    // my_modify GPIO6[1]
}
void EDMA3GpioInit()
{
    EDMA3CCPaRAMEntry paramSet;
    unsigned int acnt = 64;        // 一维
    unsigned int bcnt = 1;                // 二维
    unsigned int ccnt = 1;                // 三维
    // 申请 EDMA3 通道
    EDMA3RequestChannel(SOC_EDMA31CC_0_REGS, chType, chNum, tccNum, evtQ);//my_modify,SOC_EDMA30CC_0_REGS
        // 配置参数 RAM
        paramSet.srcAddr = (unsigned int)(&StringScr);
        paramSet.destAddr = (unsigned int)(&StringDst);
        paramSet.aCnt = (unsigned short)acnt;
        paramSet.bCnt = (unsigned short)bcnt;
        paramSet.cCnt = (unsigned short)ccnt;
        // 设置 SRC / DES 索引
        paramSet.srcBIdx = (short)acnt;
        paramSet.destBIdx = (short)acnt;
        // A Sync 传输模式(一维传输模式)
        paramSet.srcCIdx = (short)acnt;
        paramSet.destCIdx = (short)acnt;
        paramSet.linkAddr = (unsigned short)0xFFFFu;
        paramSet.bCntReload = (unsigned short)0u;
        paramSet.opt = 0u;
        // Src 及 Dest 使用自增(INCR)模式
        paramSet.opt &= 0xFFFFFFFCu;
        // 配置 TCC
        paramSet.opt |= ((tccNum << EDMA3CC_OPT_TCC_SHIFT) & EDMA3CC_OPT_TCC);
        // 写参数 RAM
        EDMA3SetPaRAM(SOC_EDMA31CC_0_REGS, chNum, ¶mSet);//my_modify,SOC_EDMA30CC_0_REGS
        // 使能传输
        EDMA3EnableTransfer(SOC_EDMA31CC_0_REGS, chNum, trigMode);//my_modify,SOC_EDMA30CC_0_REGS
}
void USER0KEYIsr(void)
{
    // 禁用 GPIO BANK 6 中断
    //GPIOBankIntDisable(SOC_GPIO_0_REGS, 0);
    //GPIOBankIntDisable(SOC_GPIO_0_REGS, 1);//my_modify,GPIO1[15],unconcerned
    GPIOBankIntDisable(SOC_GPIO_0_REGS, 6);//my_modify,GPIO6[1],unconcerned
    // 清除 GPIO BANK 6 中断事件
    //IntEventClear(SYS_INT_GPIO_B0INT);
    //IntEventClear(SYS_INT_GPIO_B1INT);
    IntEventClear(SYS_INT_GPIO_B6INT);//my_modify,unconcerned
    //if(GPIOPinIntStatus(SOC_GPIO_0_REGS, 7) == GPIO_INT_PEND)
    //if(GPIOPinIntStatus(SOC_GPIO_0_REGS, 32) == GPIO_INT_PEND)
    if(GPIOPinIntStatus(SOC_GPIO_0_REGS, 98) == GPIO_INT_PEND)//my_modify
    {
                // 清除中断状态
                //GPIOPinIntClear(SOC_GPIO_0_REGS, 7);
                //GPIOPinIntClear(SOC_GPIO_0_REGS, 32);
                GPIOPinIntClear(SOC_GPIO_0_REGS, 98);//my_modify,unconcerned
                // 核心板 LED
                unsigned int i;
                GPIOPinWrite(SOC_GPIO_0_REGS, 110, GPIO_PIN_HIGH);
                for(i=0x00FFFFFF;i>0;i--);                          // 延时
                GPIOPinWrite(SOC_GPIO_0_REGS, 110, GPIO_PIN_LOW);
    }
        // 使能 GPIO BANK 6 中断
    //GPIOBankIntEnable(SOC_GPIO_0_REGS, 0);
    GPIOBankIntEnable(SOC_GPIO_0_REGS, 6);//my_modify
        // 释放之前分配的 EDMA3 通道
        EDMA3FreeChannel(SOC_EDMA31CC_0_REGS, EDMA3_CHANNEL_TYPE_DMA, chNum, trigMode, tccNum, evtQ);//my_modify,SOC_EDMA30CC_0_REGS
        // EDMA3 初始化
        EDMA3GpioInit();
}
void GPIOBankPinInterruptInit(void)
{
    // 底板按键中断
    // 配置 USER0 KEY GPIO0[6] 为下降沿触发
    //GPIOIntTypeSet(SOC_GPIO_0_REGS, 7, GPIO_INT_TYPE_FALLEDGE);
    //GPIOIntTypeSet(SOC_GPIO_0_REGS, 32, GPIO_INT_TYPE_FALLEDGE);//my_modify,GPIO1[15],unconcerned
    GPIOIntTypeSet(SOC_GPIO_0_REGS, 98, GPIO_INT_TYPE_FALLEDGE);//my_modify,GPIO6[1],unconcerned
    // 使能 GPIO BANK 中断
    //GPIOBankIntEnable(SOC_GPIO_0_REGS, 0);
    //GPIOBankIntEnable(SOC_GPIO_0_REGS, 1); // USER0 KEY GPIO1[15]   //my_modify,unconcerned
    GPIOBankIntEnable(SOC_GPIO_0_REGS, 6); // USER0 KEY GPIO6[1]    //my_modify,unconcerned
        // 注册中断服务函数
        //IntRegister(C674X_MASK_INT6, USER0KEYIsr);
        IntRegister(C674X_MASK_INT15, USER0KEYIsr);//my_modify,unconcerned
        // 映射中断到 DSP 可屏蔽中断
        //IntEventMap(C674X_MASK_INT6, SYS_INT_GPIO_B0INT);
        IntEventMap(C674X_MASK_INT15, SYS_INT_GPIO_B6INT);//my_modify,SYS_INT_GPIO_B0INT
        // 使能 DSP 可屏蔽中断
        //IntEnable(C674X_MASK_INT6);
        IntEnable(C674X_MASK_INT15);//my_modify,unconcerned
}
int main(void)
{
        // 外设使能配置
        PSCInit();
        // 管脚复用配置
        GPIOBankPinMuxSet();
        // GPIO 管脚初始化
        GPIOBankPinInit();
        // DSP 中断初始化
        InterruptInit();
        // GPIO 管脚中断初始化
        GPIOBankPinInterruptInit();
        // EDMA3 初始化
        EDMA3GpioInit();
        // 主循环
        for(;;)
        {
        }
}
 。 
 | 
 |