Core_DSC280025C核心板使用了昊芯HXS320F28025CRISC-V DSP芯片,该芯片集成了吴芯自主研发的H28x内核。核心板包括:JTAC调试接口、供电电源接口、复位、指示灯,以及两侧的对外扩展PIN脚等,除JTAG等10外,所有外设10全部引出,用户可通过杜邦跳线进行功能验证正,便于进行不同应用开发。

还送了仿真器,这一点做得很到位,谢谢!!从网站上的原理图可以找到需要的引脚,这款芯片使用的例程后缀是EDD,也就是找到文件名为__HXS320F280025CEDD__的代码实例。

开始测试,过程简单,在网站上找到IDE安装文件Haawking-IDE_V2.3.10Pre安装程序,注意要安装到win10,据说win7下会出现很多问题,安装注意不要有中文目录,安装后,需要下载程序实例,可以直接在IDE主页面也可以到官网下载:HX2000_Examples: HX2000系列芯片示例程序,独立更新及发布,适用Haawking IDE版本信息请查阅示例程序的说明文档。 - Gitee.com
在官网找到Haawking_DSC28002x_数字信号控制器的参考手册和数据手册,简单阅读之后发现和28335有点相似,这里我测试一个ADC在转换工程,外接一个光传感器,使用3根引脚,VCC3.3 gnd和A0模拟输入引脚(上图中18引脚),实物接线如图(要注意不仅仿真器要接, 开发板也要供电 ):

首先点击“File->New->Projects”,打开新建工程的窗口,选择“Haawking Project->Haawking Project”选项,点击“Next”进入下一个界面。
在新的界面中依次选择芯片型号、选择芯片对应版本、选择 RAM/FLASH、选择“Basic Project”作为模板、输入项目名称,点击 Finish 按钮即可。
右键单击工程名,选择 Build Project 编译整个工程。如果编译出现错误,请检查环境变量是否设置正确。
编译成功后,在“*******->Debug”目录下,会出现可执行文件 ******.elf。
在实际的使用中,除了芯片的驱动库和“BSP”之外,可能需要添加自己的源文件目录和头文件目录,除了可以将源文件和头文件放在“src”目录之外,还可以手动添加。
第一个工程是实现光照传感器转换的ADC数据转换,使用了事件管理器模块循环启动ADC转换,下面来分析代码:
在main函数中先完成系统初始化任务
Device_init();
//这个函数完成系统(以及外设)时钟和看门狗、flash配置等任务
Device_initGPIO();/GPIO锁定解除/
/关中断,清中断/
Interrupt_initModule();
/初始化中断向量表/
Interrupt_initVectorTable();
EALLOW;
/配置AdcAio模拟量输入引脚/
InitAdcAio();
/配置Adc参考电压/
InitAdc();
/配置Adc模块/
Adc_config();
/配置INT_ADCA1中断入口地址,指向执行adcA1ISR中断服务程序/
Interrupt_register(INT_ADCA1, &adcA1ISR);
/配置INT_ADCA1中断使能/
Interrupt_enable(INT_ADCA1);
EDIS;
/配置EPWM初始化/
initEPWM();
大多数嵌入式初始化过程类似,都是先完成系统时钟、中断配置以及GPIO初始化,为完成采样需要使用ADC中断函数,可以使Interrupt_register(INT_ADCA1, &adcA1ISR);函数指定ADC中断入口函数名;打开配置EPWM初始化函initEPWM();
代码如下:
/关闭ADC的触发:EPWM_SOC_A-EPWM_SOCA触发/
EPWM_disableADCTrigger(EPWM1_BASE, EPWM_SOC_A);
/*配置ADC触发源:EPWM_SOC_A-EPWM_SOCA
这段代码是设置epwm工作的程序,目的是为了周期性产生ADC转换信号;
接下来是启动ADC:
while(1)
{ /使能启动ADC触发:EPWM_SOC_A-EPWM_SOCA/
EPWM_enableADCTrigger(EPWM1_BASE, EPWM_SOC_A);
/配置时钟计数模式:EPWM_COUNTER_MODE_UP-向上模式/
EPWM_setTimeBaseCounterMode(EPWM1_BASE, EPWM_COUNTER_MODE_UP);
/等待缓冲区空/
while(bufferFull == 0)
{ }
bufferFull = 0; // Clear the buffer full flag
/通过关闭ADC的EPWM_SOCA触发与EPWM计数器停止ADC采样/
EPWM_disableADCTrigger(EPWM1_BASE, EPWM_SOC_A);
EPWM_setTimeBaseCounterMode(EPWM1_BASE, EPWM_COUNTER_MODE_STOP_FREEZE);}
最后是中断处理函数:
__interrupt void adcA1ISR(void)
{/读取ADC结果ADC_SOC_NUMBER0-SOC0/
for(result=0;result<4;result++)
{
myADC0Results[result]=ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER2);
/读取ADC结果的第三次采样值,趋于准确/
if(result>=2)
{
ADC_A0result=myADC0Results[result];
}
}
/*清除ADC_INT_NUMBER1-ADCINT1中断状态*/
ADC_clearInterruptStatus(ADCA_BASE, ADC_INT_NUMBER1);
/*核查ADC中断是否出现溢出,若溢出则清除溢出中断与中断状态ADCINT1*/
if(true == ADC_getInterruptOverflowStatus(ADCA_BASE, ADC_INT_NUMBER1))
{
/*清除ADC_INT_NUMBER1-ADCINT1中断溢出状态*/
ADC_clearInterruptOverflowStatus(ADCA_BASE, ADC_INT_NUMBER1);
ADC_clearInterruptStatus(ADCA_BASE, ADC_INT_NUMBER1);
}
/*清除ADC对应的PIE中断应答*/
Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP1);
}
工程中GPIO设置和ADC配置函数省略,以下是调试结果:
总结:开发过程简易,(不像有些国产厂商拿出个半成品,什么开发环境都难以安装)代码类似ti的28335当然CPU底层架构我也没深入了解,仅从使用开发方面来说,容易上手,当然epwm还是要深入了解一下才能拿来开发电机驱动,是否兼容ti的电机代码,还要进一步学习。
举报
举报
更多回帖