平头哥半导体有限公司发布的剑池集成开发环境(以下简称“CDK”)V2.10.1版本开始支持中科昊芯HX2000系列的DSC28027、DSC28034芯片的开发与调试了。
平头哥半导体有限公司是阿里巴巴集团的全资半导体芯片业务主体,平头哥拥有端云一体全栈产品系列,涵盖数据中心人工智能芯片、处理器IP授权等,实现芯片端到端设计链路全覆盖。
平头哥CDK开发环境可以方便用户快速上手,该集成开发环境秉承着让客户“1天上手,5天出原型,20天出产品”1520技术理念,为开发者提供简洁统一的图形开发界面,帮助开发者进行应用开发。
开发环境的下载地址如下:
https://occ.t-head.cn/community/download?id=575997419775328256
下载界面如下:
下面我们将通过一段控制外部中断实现GPIO翻转的程序来介绍如何使用“CDK”调试中科昊芯DSC28027芯片。
准备阶段如下: 开发环境
下载地址:
https://occ.t-head.cn/community/download?id=575997419775328256
开发板
申请开发板地址:
http://haawking.cn/core28027
仿真器
申请仿真器地址:
http://haawking.cn/DSP-EMULATOR
准备好开发工具后就可以做开发了。
第一步,下载完成后,首先将安装包进行解压缩,打开文件夹,双击setup应用程序。
如下图所示:
第二步,安装完成后,双击桌面“CDK”的快捷方式,通过点击“File->New Project...”创建工程。
如下图所示:
第三步,新建工程选择“Haawking -> hello_haawking_dsc28027”。使用默认的工程名“hello_haawking_dsc28027”,也可以重命名符合命名规范的工程名。
新建工程界面如下:
第四步,点击“OK”以后,会跳转到程序编辑界面。双击“src”下的“main.c”文件之后,用户就可以编辑代码了。
操作界面如下图所示:
在默认创建的情况下是RAM工程,如果用户想要切换到FLASH工程,需要手动更改链接文件。首先需要双击展开“DSC28027_SDK(v1.0.0)”下的内容,然后右键点击“haawking_dsc28027_board(V1.0.0)”,再点击“Options for “haawking_dsc28027_board(V1.0.0)”。
操作如下图所示:
点击“Linker”打开该窗口,然后需要用户点击“...”图标。在弹出的窗口中双击“ldscripts”文件夹中双击“DSC28027_link_FLASH.ld”文件,最后点击“OK”。
下面介绍外部中断原理、程序开发及运行结果展示。
外部中断是DSP实时处理外部事件的一种内部机制。当某种外部事件发生时,DSP的中断系统将迫使CPU暂停正在执行的程序,转而去进行中断事件的处理。中断处理完毕后又返回被中断的程序处继续执行。
在开发程序前,需要先查看开发板原理图。
GPIO0输出电平为低时,LED将会有正向电压差,便可导通发光;TEST键默认弹起,此时GPIO12输入高电平,按下TEST键时,GPIO12输入低电平。
之后就可以编写代码了。具体代码如下:
/*
* XintInterrupt.c
*
* Created on: 2021年10月25日
* Author: Shentingting
*/
#include <stdio.h>
#include "dsc_config.h"
#include <syscalls.h>
#include "xcustom.h"
#include "IQmathLib.h"
/*函数声明*/
void xint1_isr(void);
void ExInt_Init(void);
void InitGPIO(void);
int main(void)
{
volatile unsigned int i,j;
InitSysCtrl();
InitGPIO();
DINT;
InitPieCtrl();
IER_DISABLE(0xFFFF); //禁止中断使能
IFR_DISABLE(0xFFFF); //禁止中断标志使能
InitPieVectTable(); //初始化中断向量表,将中断服务函数与中断向量表关联
ExInt_Init(); //初始化中断
EINT; //开启中断
while(1){}
return 0;
}
INTERRUPT void xint1_isr()
{
GpioDataRegs.GPATOGGLE.bit.GPIO0 = 1;
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}
void InitGPIO(void)
{
EALLOW;
GpioCtrlRegs.GPAMUX1.bit.GPIO12 = 0;
GpioCtrlRegs.GPADIR.bit.GPIO12 = 0;
GpioCtrlRegs.GPAPUD.bit.GPIO12 = 1;
GpioCtrlRegs.GPAQSEL1.bit.GPIO12 = 0;
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0;
GpioCtrlRegs.GPADIR.bit.GPIO0 = 1;
GpioCtrlRegs.GPAPUD.bit.GPIO0 = 1;
EDIS;
}
void ExInt_Init(void)
{
EALLOW;
GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 12;
EDIS;
XIntruptRegs.XINT1CR.bit.POLARITY = 2;
XIntruptRegs.XINT1CR.bit.ENABLE = 1;
EALLOW;
PieVectTable.XINT1 = &xint1_isr;
EDIS;
IER_ENABLE(M_INT1);
PieCtrlRegs.PIEIER1.bit.INTx4 = 1;
}
“CDK”调试仿真界面如下:
运行效果如下:
|