DSP

5502_图像板学习参考

2019-07-13 19:39发布

以下是我调试5502图像板所累积的认识和经验,仅供参考,有错请指正。   前提 1.  请安装CCS和仿真器驱动,并配置CCS C5502 XDS510 Emulator   第一个程序------点亮LED        打开工程 LED_TEST和文件 LED_TEST.C ,仔细浏览程序。程序由C语言编写,简单易懂。由于Ti提供了50006000系列DSPCSL库,调用CSL库的函数使得配置芯片更容易,CSL库中的函数请参考TMS320C55x Chip Support Library API Reference Guide,使用CSL库函数前需要一些简单配置,请参考TMS320C55x Chip Support Library API Reference Guide 第二章 How to Use CSL。一般的程序都可以参考LED_TEST的框架结构。        CSL_init();  /*初始化CSL*/       PLL_setFreq(1, 0xF, 0, 1, 3, 3, 0);   /*设置系统的运行速度为300MHz*/        // SYSCLK1(Fast Peripherals)=150MHz SYSCLK2(Slow Peripherals) = SYSCLK3(EMIF Internal Clock) = 75MHz        CHIP_RSET(XBSR,0x0001);  /* EMIF为全EMIF接口 */     EMIF_config(&MyEmifConfig);  /*初始化DSPEMIF接口*/        IRQ_setVecs((Uint32)(&VECSTART)); /*中断向量表设置为VECSTART ,在vectors.s55 文件中*/        IRQ_globalDisable();/* Temporarily disable all maskable interrupts */ 要完全理解程序,您需要参考TMS320VC5502 Data Sheet了解5502的工作原理和寄存器设置以及CSL库函数的详细说明。 #define Led     (*(volatile Uint16 *)(0x40000A)) 定义了Led端口,其字地址是0x40000A 向其低四位写1可以点亮Lec,写0熄灭Led Led = 0xf 点亮4Led        使用IRQ_plug(EventId0,&Timer0Isr);来设置定时器的中断服务程序,其余的请自行学习。需要说明的另一个问题是地址的分配,5502CE0—CE3  4块空间,参考DSP手册,其中片内的双口RAM 64KDARAM0  : origin = 0001000h, length = 000F000h60k用来存放程序,所以程序一般不可以 >60K,否则请自行调整储存配置文件,CE1空间分配给FLASH CE2空间给FPGAUSBCE3空间给SRAM。初始化时需要设置各空间存储器的访问时序,即 EMIF_config(&MyEmifConfig)     第二个程序-----烧些FLASH        本程序的目的是将用户程序烧些至FLASH中,然后上电程序即可运行。图像板可以通过跳线选择多种启动方式,用跳线短路J4156引脚可以选择从FLASH启动。C5502 ROM中的BootLoader可以自动将FLASH中的程序导到DARAM中,然后运行。下面以上一个程序LED_TEST为用户程序,介绍将其烧入FLASH中的过程。关于BootLoader请参考Using the TMS320VC5501C5502 Bootloader 首先要生成LED_TEST.out的可执行文件,然后通过LED_TEST/Debug目录下的hex55.exe 程序生成LED_TEST.hex 文件,在命令行输入hex55.exe -boot -v5510:2 -parallel16 -map LED_TEST.map -a -delay 0x100 -o LED_TEST.hex LED_TEST.out ,接着把LED_TEST.hex转化成可导入CCSLED_TEST.dat,在命令行输入hex2dat.exe LED_TEST.hex LED_TEST.dat,下一步在Load Program FLASHBOOT.out以后,通过 File-->Data-->LoadLED_TEST.dat导到DARAM中,然后运行程序即可把LED_TEST程序正确烧写到FLASH中。需要注意用户程序的起始地址(一般是DARAM0 : origin = 0001000h)和必须与FLASHBOOT程序中的#define BIGSECT_ADDRESS  0x00001000 相同。     第三个程序-----采集原始图像        本程序的目的是通过FPGA实现图像采集的功能。首先需要介绍一下FPGA程序,在FPGA程序中设置了两个全局的寄存器,一个是系统状态寄存器,一个是系统控制寄存器。 /*System Status Register*/ #define SYSSTATA 0x400020 /*系统外设状态寄存器在IO空间的地址。只读*/   /*D07   D06    D05      D04        D03            D02          D01             D00 * res           res      res  USBVBUS   USBRDY   USBFLAGC   USBFLAGB  USBFLAGA *各控制位说明: *                   USBFLAGCUSBFLAGC的状态; *                USBFLAGBUSBFLAGB的状态; *           USBFLAGAUSBFLAGA的状态; *           USBRDY   USBREADY的状态; *           USBVBUS  USB连线的的状态;   /*System Control Register */ #define SYSCNTLA 0x400021 /*系统设置寄存器在IO空间的地址。读写*/   /*D07     D06   D05     D04   D03     D02     D01       D00 * res            res   res    res    res   res   COLLECT   USBWAKE *各控制位说明: *            USBWAKE USB唤醒信号 *                          其值为0时:不唤醒USB *                          其值为1时: 唤醒USB(默认值)。 *            COLLECT 1使7113采集图像,一帧图像采集完后自动清0 */ 这样图像采集程序就非常简单了,只要向SYSCNTLCOLLECT位写1即可启动采集,一帧图像采集完成后FPGADSPINT1发送中断,图像大小为360*288,从SRAM0地址开始存放。只需在SYSCNTL = 0x03;下方的一条语句加个端点,然后执行程序,执行FileàDataàSave 保存地址为0x600000,长度为0x19500的图像数据为.dat文件,此图像文件存储的是YUV格式的数据,通过VC程序show_yuv_image.exe可以转化成RGB的图像显示,在命令行输入show_yuv_image.exe *.dat即可,请安装OpenCV来支持图像显示。修改了7113的 {MOD}饱和度值使 {MOD}彩更逼真,想要改变7113输出图像的设置,请修改数组init7113[102]中的值,该数组的值通过I2C总线写入到7113的寄存器中,具体的寄存器功能请参考7113的手册。