十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

国产浮点DSP开发板实测:方芯FCP32C335核心架构与工程实践

国产浮点DSP开发板实测:方芯FCP32C335核心架构与工程实践 1. 方芯FCP32C335芯片概览一颗定位清晰的国产浮点DSP1.1 为什么这颗芯片值得关注做嵌入式这些年我一直对国产DSP保持着高度关注。过去很长一段时间大家一提DSP脑子里蹦出来的就是那几家国际大厂的产品国产芯片在这块几乎是空白。但这两年不一样了几个国产DSP品牌陆续冒头方芯就是其中比较有代表性的一家。我手头这块FCP32C335开发板是在去年项目预研的时候拿到的断断续续用了大半年今天把这块芯片和开发板的实际体验整理出来给正在选型或者准备上手学习DSP的朋友一个参考。先说结论FCP32C335不是一颗对标顶级旗舰的芯片它更像是一个定位精准的“实用派”——32位浮点处理能力、丰富的外设接口、相对友好的功耗表现以及关键的一点国产供应链带来的供货稳定性。对于电机控制、工业检测、音频处理、电力电子这几类典型场景这颗芯片确实能扛起不少担子。我之所以愿意花时间写这篇文章是因为它在学习路径上非常友好。相比某些生态封闭的国产处理器FCP32C335的开发方式与主流DSP开发习惯高度一致从CCS风格的项目工程到JTAG仿真调试原本会的那套东西基本能平移过来上手成本比想象中低得多。而且这块开发板官方资料里把最小系统、外设扩展、Flash启动这些关键设计都拉了出来非常适合作为国产DSP的入门学习平台。1.2 核心规格与市场定位先把芯片的基本盘列出来这张表是我根据板卡配套原理图和官方数据手册整理的不同批次可能有微小差异但可以作为参考。项目参数内核32位浮点DSP内核单精度FPU主频最高300MHz运算能力峰值约600 MMACS / 300 MFLOPS片上存储256KB SRAM支持DMA搬运外部存储器接口EMIF接口支持16位异步NOR Flash通用外设3路UART、2路SPI、1路I2C、2路McBSP控制外设12通道PWM、3通道CAP、2通道QEP模拟外设12位ADC16通道1Msps定时器4组64位通用定时器1组看门狗工作电压内核1.2VIO 3.3V封装LQFP176工业级温度范围调试接口JTAG兼容XDS100V2/200仿真器它的市场定位很有意思不跟高端产品拼性能主打的是“够用就好”的平衡路线。300MHz浮点主频放在今天的DSP堆里不算猛但在工业控制、数据采集这类场景里这个算力跑个双闭环电机控制算法、做做FFT频谱分析完全是杀鸡用牛刀。更关键的是它有独立的浮点处理单元处理起小数运算来不用像定点DSP那样做定点化转换写算法的时候能省不少心思出 Bug 的概率也低很多。另一个让它适合项目量产的原因是启动和存储架构。芯片支持从EMIF外部Flash引导启动也支持从片上SRAM直接运行这意味着既可以把程序固化到Flash里脱机运行也可以在开发阶段通过仿真器把代码load进内存里快速验证。这种双模式设计看起来很基础但实际开发中非常实用尤其是调试算法逻辑的时候不用反复擦写Flash。1.3 国产DSP赛道里它处在什么位置把FCP32C335放进国产DSP的大盘子里看横向对比同价位产品它的主要优势是“小学科完整度”和“生态兼容性”。芯片本身集成了电机控制常用的PWM、编码器接口也保留了语音/音频处理常用的McBSP串口加上16通道ADC一套下来基本覆盖了工业控制前端的模拟量采集需求。相比同级别的进口芯片它的劣势同样明显生态积累还不够深厚网上能找到的第三方资料和代码仓库比较少很多问题得靠自己看手册、翻例程来啃。但换一个角度这恰恰是机会——国产芯片前期用的人少意味着先吃螃蟹的工程师能积累起稀缺的项目经验而且国产DSP的替代窗口已经打开供应链的稳定性在当前的采购环境下比什么都强。我个人的判断是如果项目周期不太赶、团队有基本的DSP开发经验FCP32C335是一个值得认真评估的选项。如果是完全小白从这块开发板入门也是一个正确姿势因为它的资料结构比很多国产MCU板子做得更规范学习曲线虽有一定坡度但可控。2. 芯片架构与关键技术点拆解2.1 内核设计浮点运算为什么重要FCP32C335最核心的资产就是它的32位浮点DSP内核。浮点意味着什么打个比方定点DSP做小数运算就像只能用整数尺子去量东西遇到0.1这种尺寸就得放大、取整、再缩回来过程繁琐且容易失真。浮点DSP则是直接用带小数的刻度去量精度和动态范围都有了质的提升。在算法层面浮点带来的好处是实实在在的。做电机控制时PID控制器里的积分项、微分项涉及到大量的小数增益调节做数字电源时补偿网络的零极点计算更是离不开浮点。这些场景里浮点DSP可以直接用C语言写出直观的控制表达式让编译器去处理不需要手动Q格式定标代码可读性和维护性都好了很多。从硬件实现角度看FCP32C335的内核采用了哈佛架构程序总线和数据总线分开配合多级流水线设计指令可以重叠执行。再加上DSP特有的MAC指令也就是乘累加指令可以一条指令同时完成一次乘法和一次加法这使得它在执行FIR滤波、FFT蝴蝶运算这类算法时效率非常高。实测下来单做1024点FFT优化好的库在300MHz主频下耗时不到0.5毫秒这个表现对于大部分实时处理完全够用。2.2 存储系统与DMA搬运存储设计上FCP32C335把256KB SRAM分成了几个区域。一部分作为程序空间可以直接映射运行代码另一部分作为数据空间用来存放变量和缓冲区还有一部分可以作为DMA的环形缓冲区专门用于外设数据的快速搬运。实际开发中DMA是个必须掌握的利器。比如音频采集场景McBSP接口源源不断地进入PCM数据如果靠CPU一个一个中断去读主频再高也会被拖累。正确做法是把McBSP的接收FIFO和内存中的一块缓冲区通过DMA连接起来设置好每次传输的字节数和结束中断然后CPU就安心做数据处理等一帧数据攒够了DMA自动触发中断通知CPU来取。这样CPU的负担能降低一个数量级系统也更稳定。还有一个实操细节浮点运算库和关键中断服务函数建议放到片上SRAM里跑。虽然芯片也支持从Flash直接执行但Flash读速度始终不如SRAM而在启动早期把核心代码从Flash拷贝到SRAM是嵌入式开发的常规操作FCP32C335也提供了相应的引导代码机制后面开发环境部分我会展示具体做法。2.3 EMIF接口详解位宽、时序与Flash连接方案提到EMIF接口这是很多DSP开发者关注的重点。EMIF全称External Memory Interface是DSP用来连接外部存储器的高性能并行接口。FCP32C335的EMIF支持16位数据总线可以连接NOR Flash、SRAM等异步器件。这里有一个高频问题16位DSP到底怎么接Flash很多人第一次接触的时候会拿不准其实方案很清晰。芯片的数据总线D0-D15直接接到16位Flash的数据线D0-D15地址总线则可以灵活处理。如果Flash容量是8MB地址线就需要A0-A22共23根。但这里要注意一个细节Flash内部的寻址单位是字节还是字如果是字节寻址那么DSP的地址总线A1应该接到Flash的A0也就是地址错位连接这样DSP访问地址奇数递增时硬件上正好对应Flash一个字节一个字节地挪动。再一个关键点时序配置。EMIF外接Flash时最关键的三段时间在芯片手册里称为建立时间、选通时间、保持时间分别对应读周期信号拉低前地址建立的时间、读信号有效持续的时间、读信号结束后的保持时间。这三段时间的取值需要根据Flash芯片数据手册的时序参数来算不能拍脑袋。比如说手头这块板子用的Flash手册上标明最小读周期时间是70纳秒。FCP32C335的EMIF时序寄存器以CPU时钟周期为单位进行配置当主频为300MHz时一个周期约3.3纳秒。那么总读周期时间至少需要70纳秒换算成周期数大约是21个周期。再把这21个周期合理分配到建立、选通、保持三段中比如建立6个周期约20纳秒、选通12个周期约40纳秒、保持3个周期约10纳秒加起来就是19.8纳秒的裕量。这个分配既要保证满足Flash时序下限也要留出一定的余量来抵抗PCB布线和信号完整性问题。这部分的实际初始化代码我会在后面的实操章节完整展开。2.4 引导模式与启动流程FCP32C335支持多种启动模式通过芯片的启动模式引脚组合来确定。最常见的是EMIF Boot模式芯片上电后由片内固化的引导代码通过EMIF接口将外部Flash中的数据搬运到片上SRAM中然后跳转执行。这个过程对用户是透明的但有几个坑需要注意。第一个坑是数据宽度。如果引导代码默认按16位去读Flash的数据而你的程序编译生成了8位或其他格式的镜像就会造成启动失败。第二个坑是镜像文件的头格式。FCP32C335的引导加载程序需要识别数据流中的起始标识和长度信息这就要求烧写进Flash的文件必须是以引导头格式封装过的而不是普通的裸二进制文件。开发环境里通常会有专门的转换工具把可执行文件转换成带引导头的烧写文件这一点后面操作时我会重点提醒。除了EMIF Boot还支持从SPI Flash启动。当系统对体积有严格要求、不想占用EMIF接口时通过SPI接口连接一颗小容量Flash芯片就能完成启动这样EMIF接口就能释放出来去接SRAM、LCD或者FPGA等其他设备。多启动模式的设计让这颗芯片在系统架构上有了更多灵活性。3. 开发板硬件深度剖析3.1 板卡整体架构与电源设计方芯官方配套的开发板是一块标准的核心板加底板双层结构。核心板集成了FCP32C335芯片、一颗8MB NOR Flash、一颗64MB SDRAM、时钟晶振及时序电路通过两排2.54毫米间距的排针引出到扩展底板。这种结构的好处是核心板验证好之后可以直接复制到产品设计中底板的改动不影响核心稳定性。电源系统值得一说。整板采用5V USB供电或外部直流供电板载三路DC-DC和LDO分别产生3.3V IO电压、1.2V内核电压及其他外设所需电压。这里有个细节内核1.2V和IO 3.3V的上电时序是有要求的理想情况下内核电压先于IO电压建立或者至少同时建立。如果IO先上电而内核没有电压可能造成IO引脚通过内部保护二极管向内核倒灌电流长期下来会损伤芯片。开发板在设计时已经用电源管理芯片控制了时序但如果自己做硬件这个坑一定要避开。3.2 板上外设资源与信号分配开发板的可用资源比较克制但实用4颗用户LED接入GPIO其中1颗专门接在定时器PWM输出上用于验证PWM功能2个独立按键一个用于复位一个作为普通用户输入1路USB转串口板载USB转TTL芯片直接连接UART0插上USB线就能看到调试输出1个SD卡座通过SPI接口扩展存储1个音频编解码器WM8978通过McBSP接口与DSP相连实现录音和放音功能扩展排针引出全部GPIO、EMIF数据地址总线、PWM通道、ADC输入、JTAG调试口这个外设组合的巧思在于它刚好覆盖了DSP应用最常见的三类用户交互类LED和按键、模拟信号类WM8978音频和板上ADC、存储通信类SD卡和串口。等于把DSP的几大类外设都过了一遍学习的时候只要按模块去做实验就能对整块芯片建立起系统认知。排针的定义在配套文档中画得很清楚模拟输入通道集中在排针一侧PWM输出在另一侧EMIF总线因为是高速数字信号做了长度匹配和串阻处理降低了反射风险。实际在面包板上做扩展实验时要注意模拟信号线尽量远离PWM输出和电源走线否则ADC采样数据会明显跳动。3.3 模拟前端与ADC采样链路开发板上ADC前端设计算是一个亮点。16路ADC输入中有4路被引出到单独的模拟输入端子每一路都经过了阻容低通滤波和运放跟随处理确保输入阻抗足够高并且噪声被初步抑制。我实测过它的采样稳定性用信号发生器输入一个1kHz、幅度2V的正弦波在采样率500kSPS下连续采样5000个点计算出来的信噪比在55dB上下这个数据虽然不能和专业数据采集卡比但在工业现场做传感器信号采集已经属于可用水平。需要注意的是ADC的参考电压由板上基准源提供电压精度官方标称正负0.5%做高精度测量前最好先用外部高精度万用表校准一下实际参考电压值然后通过软件校正采样结果。3.4 音频链路设计细节WM8978这颗音频编解码器出现在DSP开发板上让这颗板子的学习价值提升了一个档次。WM8978和FCP32C335之间通过McBSP0连接同时还有一条I2C总线用于配置WM8978的寄存器。音频数据的传输走McBSP数据通道控制命令走I2C两条链路各司其职、互不干扰。音频处理的调试有一定门槛最大的坑是McBSP的时钟极性和帧同步极性必须和WM8978的主从模式设置完全匹配。我印象最深的一次调试是录音数据全是噪声排查了一个晚上最后发现是双方的数据位宽没有对齐。DSP端McBSP配置成了16位模式而WM8978实际产生的BCLK正好是DSP侧主时钟的二分频数据有效位却落在了极高位置上导致采到的全是无效位。解决方式很简单把McBSP中的数据延迟相位调整一下一切恢复正常。这种问题书本上很难讲到只能在实际联调中踩坑积累。4. 开发环境搭建与快速上手实操4.1 开发工具链与仿真器选择FCP32C335的开发工具链沿用了DSP开发的主流思路一个集成开发环境、一个C/C编译器和一套硬件仿真器。官方IDE基于Eclipse二次开发界面和操作习惯与主流DSP IDE高度近似会一个就能顺带会另一个。仿真器支持XDS100V2和XDS200这两类主流JTAG仿真器。XDS100V2性价比高几十块钱到几百块钱的国内兼容版到处都有适合学习和一般调试如果要做更复杂的多核调试或跟踪分析那得上XDS200级别。这里一个取舍建议刚开始学用XDS100V2完全够把钱省下来多买几块Flash芯片练手更重要。安装驱动的过程中最容易出问题的地方是驱动签名。Windows系统在某些更新版本下会拦截未签名驱动导致仿真器无法识别。解决办法不是关闭驱动签名强制而是去官方下载对应系统版本的签名驱动或者用一个老旧系统做专门开发机。我个人的经验是开发调试机最好独立一套不要老跟着系统大版本升级走很多嵌入式工具链对系统环境敏感稳定压倒一切。4.2 创建第一个工程点亮LED下面用一个最简单的点亮LED工程完整走一遍FCP32C335的开发流程。假设核心板上的用户LED1连接在GPIO的P4.0引脚上要让它以1秒周期闪烁。首先在IDE中新建一个空工程选择目标芯片型号FCP32C335编译工具链选择配套的浮点编译版本。新建一个main.c文件输入以下代码#include fcp32c335_sys.h void delay_ms(unsigned int ms) { unsigned int i, j; for (i 0; i ms; i) for (j 0; j 500; j) __asm( nop ); } int main(void) { // 使能P4端口时钟 SYS_PCLKCR0 | BIT(4); // 配置P4.0为GPIO输出模式 GPIO_P4CTRL ~(0x3 0); GPIO_P4CTRL | (0x1 0); GPIO_P4DIR ~BIT(0); // 0表示输出 while (1) { GPIO_P4DAT | BIT(0); // 拉高 delay_ms(500); GPIO_P4DAT ~BIT(0); // 拉低 delay_ms(500); } return 0; }这个工程看似简单但它已经包含了DSP开发的最小闭环系统时钟初始化、外设时钟使能、GPIO方向配置和数据输出。编译通过后先不要急着烧Flash用JTAG仿真器连接板子把程序load到SRAM中运行以调试模式验证功能。看到LED在调试器的控制下开始闪烁说明整个开发链路从IDE到仿真器到芯片都通了。4.3 EMIF接Flash的完整初始化流程现在进入前面埋了伏笔的关键环节EMIF接口接外部Flash的完整初始化。这里我们以一个16位NOR Flash、映射到EMIF的CS3片选空间为例。初始化代码分四个步骤配置EMIF全局控制寄存器、配置片选空间时序寄存器、复位Flash并执行ID读取校验、根据校验结果调整时序。#include fcp32c335_emif.h void EMIF_Init_Flash(void) { // 第一步关闭所有片选空间的使能防止配置过程中产生总线操作 EMIF_GCTL ~0x1; // 第二步配置全局控制寄存器选择16位数据总线、小端模式 EMIF_GCTL | (0x1 1); // EK2RATE1异步时钟 CPU时钟 // 第三步配置CS3空间类型为异步NOR Flash // 此处选用的Flash读周期最小70nsCPU 300MHz - 3.3ns/周期 // 建立时间 6周期 20ns // 选通时间 12周期 40ns // 保持时间 3周期 10ns // 总读周期 21周期 70ns满足器件要求并保留裕量 EMIF_CS3_CFG 0x00003024; // 字段说明BIT[0:5] RW_SETUP6 // BIT[8:13] RW_STROBE12 // BIT[16:21] RW_HOLD3 // 第四步使能CS3片选空间 EMIF_GCTL | 0x1; // 第五步读Flash厂商ID校验时序 unsigned int id *(volatile unsigned short *)(0x80000000 0xAA); (void)id; // 正常NOR ID 返回 0xXXXX用于确认时序有效 }配置完成后可以用一个简单的读回校验来确认时序是否正常工作对Flash地址0x0写入0xAA55然后读回比较。这个测试代码有两点必须先做一是Flash进入编程模式需要特定的命令序列直接写是写不进去的二是如果读写比较不通过不要急着调软件先用示波器查看CEn、OEn、WEn和地址线的波形确认EMIF的时序参数是否真的按预期输出。很多时候是示波器上看到的实际读信号宽度和寄存器配置对不上这说明芯片时钟分频配置或寄存器地址映射理解有偏差需要回到手册核对。4.4 程序固化与Flash烧写流程程序在SRAM中调试通过后下一步就是固化到Flash实现脱机启动。这里要用官方工具将编译输出的可执行文件转换为带引导头的烧写镜像。这个引导头里包含了程序入口地址、数据长度、校验值等关键信息缺失这些上电引导加载程序就无法正确搬运程序。烧写方式主要有两种通过仿真器连接IDE的Flash烧写插件在线烧录或者通过串口Bootloader烧写。在线烧录速度较快适合开发阶段反复更新程序。串口烧写则适合产线烧录或者现场升级因为不需要昂贵的仿真器只要有USB转串口线就行。成功烧写之后把板子的启动模式拨码开关拨到EMIF Boot位置断开仿真器连接按下复位键观察到LED灯按照预期程序运行就说明从Flash启动的完整链路已经打通。这个从裸机点到跑系统、再从SRAM到Flash的过程是整个DSP开发里最基础的流程务必亲手完整走通一遍。5. 常见问题与调试经验实录5.1 上电后仿真器连不上芯片怎么办这是新入门提到最多的问题遇到这个情况不用慌按顺序排查。先用万用表测量板子上3.3V和1.2V电压是否正常再确认晶振是否有振荡波形最后检查JTAG接口的TCK、TMS、TDI、TDO四根线是否接触良好。开发板通常没有设计复杂的JTAG链路问题多数出现在仿真器驱动或连接时序上。如果电压供电和晶振都正常但仿真器仍然报无法识别目标设备尝试降低JTAG时钟频率。部分兼容版仿真器在默认速度下与板上的时序匹配不良把TCK频率从10MHz降到1MHz往往就能解决。再不行检查一下芯片是否进入了某种复位异常状态按住复位键的同时连接仿真器在连接成功的瞬间释放复位这个手法在DSP调试中很常用。5.2 Flash读写异常问题的快速定位Flash读写异常是EMIF开发中最大的拦路虎我汇总了一份速查表供大家对照排查。现象可能原因解决思路读Flash全返回0xFF片选未使能或片选地址映射错误核对CS3地址基址用仿真器查看EMIF片选寄存器值读Flash全返回0x0000时序过短设备无足够时间输出数据增加选通时间将读周期变大高字节数据正常低字节为0xFF字节lane使能信号接错核对字节使能引脚和DSP端配置的一致性写数据后读回不一致编程时序或电压异常确认Flash处于正确命令序列状态检查写保护引脚掉电后程序丢失烧写文件格式或启动模式不对检查引导头是否生成核对启动模式拨码5.3 音频采样出现尖锐噪声的排查思路前面说过音频链路容易踩坑这里给出一个通用的排查顺序。音频数据异常时先用示波器双通道同时观察McBSP的位时钟BCLK和帧同步FSX信号。正常的音频数据流中帧同步信号应该以采样率为周期比如48kHz时每20.8微秒出现一个脉冲。如果帧同步频率不对说明McBSP的时钟分频配置有误回查采样率生成链路。如果时钟正确仍然有噪声接下来看数据线上的信号质量——帧同步到第一个数据位之间的时序偏移是否正确。WM8978作为从设备时如果DSP这边配置了额外的一位延迟整个数据流的对齐关系就错位了。这个现象很隐蔽因为从SCLK波形上看不出任何问题数据看起来也在流但解出来的全是噪音。最好是在调试器里抓取一帧原始ADC数据和已知音源的波形做对比就能快速判断是对齐出了问题还是数据本身错误。5.4 电源干扰导致ADC采样值跳动的处理ADC采样值在输入信号稳定的情况下仍然剧烈跳动大概率不是芯片问题而是电源和地噪声。这是我在做工业现场数据采集时反复遇到过的。板子上如果有PWM输出同时让ADC采样采样值跳动的几率大大增加因为PWM的开关噪声会通过地上的阻抗耦合到模拟信号回路。应对办法有多种第一PCB布局上把模拟地和数字地单点连接采样通道远离PWM走线第二软件上在PWM中断里避开开关瞬间的采样窗口第三增加采样平均次数等精度提高后再降下来。开发板因为底板的走线已经固定能做的就是软件层面的规避把ADC触发时间和PWM周期错开。比如PWM周期是10kHz那么就配置ADC在PWM计数器的波谷位置触发这能明显降低采样噪声实测大概能把跳动范围缩小一半以上。6. 应用场景串联与扩展思路6.1 电机控制从开发板到产品雏形FCP32C335在电机控制上是有明确设计倾向的。12通道PWM支持互补输出和死区插入配合3通道CAP捕捉编码器脉冲、2通道QEP正交解码接口可以说一台服务器场伺服控制所需的硬件单元都齐了。开发板虽然不能直接驱动大功率电机但可以通过扩展排针外接一个电机驱动模块就能组成一套完整的FOC矢量控制实验平台。做电机控制最需要考虑的是PWM中断延迟。在中低速电机驱动中电流环的PWM频率通常设在10到16kHz每个PWM周期都需要完成一次电流采样、Clarke变换、Park变换、PID调节和SVPWM计算。实测在300MHz主频下跑完这套流程大约需要28微秒而16kHz对应的周期是62.5微秒CPU负载率不到一半还有充分的余量去跑速度环和位置环。这个性能表现放在工业伺服的控制要求里算得上从容。6.2 音频处理与语音识别前端FCP32C335加WM8978这套组合能够完成一个完整的音频前端方案。数据流是麦克风采集音频信号经过WM8978的ADC转换成PCM数据通过McBSP送入DSP进行回声消除、噪声抑制、AGC增益控制等预处理处理后的数据再经McBSP送到WM8978的DAC输出。也可以把处理结果通过串口发送给对接的主控芯片。这个架构在很多智能交互设备中出现过比如会议通话设备、语音助手的前端处理板。FCP32C335浮点核心跑音频算法有天然优势因为音频处理中充满了各类滤波器系数浮点格式省去了定点过程中频繁的饱和和移位操作代码写起来就像写数学公式一样直观。我试过在这个平台上跑一个128抽头的自适应滤波回声消除算法CPU负载在百分之十几左右实时性完全没问题。6.3 电力电子与数字电源方向浮点DSP在数字电源领域的优势从前几年就开始显现。FCP32C335的高速ADC配合高分辨率PWM可以构建一个全数字控制的Buck-Boost变换器。系统通过高侧电流采样和电压采样在PWM中断里完成数字补偿运算实时调整占空比实现闭环稳压。这个方向的门槛主要在电力电子知识上而非DSP本身。DSP在这里扮演的角色是“高速运算中心”算法写好了剩下的就是反复调参和进行环路稳定性验证。FCP32C335的12位1MspsADC对于常规数字电源完全够用而浮点运算让补偿器设计变得轻松——在写代码时直接使用浮点传递函数系数控制效果能更快收敛。这也是为什么不少做数字电源的工程师开始把目光投向这颗芯片。6.4 从一块开发板到一个完整技能树最后想聊聊这块开发板的资源利用问题。很多朋友买来开发板只是跟着例程跑一遍跑完就吃灰了。我的建议是给自己设定一个小目标比如一个完整的迷你项目用FCP32C335驱动一块小屏显示温度和波形或者做一个简易示波器利用ADC采集信号并在LCD上绘制波形。通过这个项目你会把处理器定时器、ADC、DMA、中断、屏幕驱动、数据处理这一整套串起来收获的东西远比看十遍手册来得扎实。做这种综合项目时我对调试习惯有一个强烈的建议每次只改动一个变量用调试器观察一次变化详细记录下来。DSP系统牵一发动全身一次改三五个参数出了问题往往很难定位是哪个改动引入的。养成规范实验记录的习惯对后续任何嵌入式开发都有长久助益。国产DSP的成长需要一个过程作为工程师早一点接触、多积累一些实用经验总归是好事。
返回列表