tag 标签: DSP

相关帖子
相关博文
  • 2024-2-7 14:33
    107 次阅读|
    0 个评论
    一、实验目的 了解UART 的功能和结构,学习RS232串口通信协议,并实现通过查询方式进行 RS232 串口通信收发。 二、实验原理RS232 RS232接口是现在主流的串行通信接口之一,被广泛用于计算机串行接口外设连接。 RS232标准的接口,在电压处于-3V-15V时处于逻辑1状,当电压在+3V+15V时,处于逻辑0状态。另外在型号线这块RTS/CTS和DTR/DSR以及CD/RI这些信号线都是以前较老形式的,现在常用的信号线就是RXD/TXD和GND这3条,如果不连接GND地线的话可能会出现乱码。在接头上的2和3接口是接收和发送,5接口就是地线,使用这三条就可以完成接收和发送数据。 RS232通信的主要特点 (1)全双工数据传输 串行数据流可以同时进行双向传输。 (2)点对点通信 RS232只能实现点对点的通信方式。 RS232接口的局限性 (1)接口信号电平值较高,接口电路芯片容易损坏。 (2)传输速率低,最高波特率19200bps。 (3)抗干扰能力较差。 (4)传输距离有限,一般在15m以内。 (5)只能实现点对点的通讯方式。 RS232接口 UART1_RXD、UART1_TXD和RS232_UART2_TXD、RS232_UART2_RXD。RS232规定用电平表示数据,因此线路就是单线路的,用两根线才能达到全双工的目的。 实验板上的CON14和CON15是由UART1和UART2通过MAX3232串口电平转换芯片得到的RS232串口,使用的是9针DB9接口。在本实验中使用的是UART1串口。 UART 全称Universal Asynchronous Receiver/Transmitter,通用异步收发传输器。 UART是一种通用串行数据总线,用于异步通信,异步通信以一个字符为传输单位,通信中两个字符间的时间间隔多少是不固定的,但在同一个字符中的两个相邻位间的时间间隔是固定的。该总线双向通信,可以实现全双工传输和接收。串行通信是指利用一条传输线将资料一位位地顺序传送,特点是通信线路简单,利用简单的线缆就可实现通信,降低成本,适用于远距离通信,但传输速度慢的应用场合。在嵌入式设计中,UART用于主机与辅助设备通信,如PC机通信包括与监控调试器和其它器件。 UART特点 (1)通用异步 (2)串行低速总线 (3)全双工 (4)需要约定通信速率 (5)只能点对点通信 UART的功能框图 UART通信模式 (1)单工:数据传输仅能沿一个方向,不能实现反向传输。 (2)半双工:数据传输可以沿两个方向,但需要分时进行(RS485) (3)全双工:数据可以同时进行双向传输。 UART通信协议 起始位 : 发出一个逻辑 0 信号,表示传输字符的开始。 数据位 : 数据位的个数可以是 5、6、7、8 等,构成一个字符。通常采用ASCII码(7位),从最低位开始传送。 校验位 : 数据位加上这一位后,使得 1 的位数应为偶数(偶校验)或奇数(奇校验),以此来校验传输的正确性。 停止位 : 数据的结束标志。可以是 1 位、1.5 位、2 位的高电平。 空闲位 : 处于逻辑 1 状态,表示当前线路上没有数据传送。 波特率 指的是串口通信的速率,也就是串口通信时每秒钟可以传输多少个二进制。譬如每秒钟可以传输9600个二进制位,波特率就是9600。 串口通信的波特率不能随意设定,而应该在一些值中选择,一般常见的波特率是9600和115200(低端单片机如51常用9600,高端单片机和嵌入式SoC一般用115200)。 (1)通信双方必须事先设定相同的波特率这样才能成功通信,如果发送方和接受方按照不同的波特率通信则根本收不到,因此比特率最好是大家熟知的而不是随意指定的 (2)常用的波特率经过长久发展,就形成了共识,常用9600 和115200。 程序流程设计 程序流程设计中首先要进行外设使能配置,接着进行管脚复用配置和UART初始化,然后进行发送数据,串口不断查询有无需要接收的数据,最后返回数据。 查询方式 对I/O设备的程序轮流查询,它定时对设备轮流询问一遍有无处理需求。轮流询问之后,有需求的,则加以处理。在处理I/O设备的需求完之后,处理机返回继续工作。 CPU要不断地读取状态字和检测状态字,不管那个外围设备是否有服务请求,都必须一一查询,许多次的重复查询,可能都是无用的,而又占去了CPU的时间,效率较低。 源码说明 管脚复用源码 管脚复用配置。 GPIO复用配置操作直接封装成了函数,使用时,直接包含“TL6748.h”文件 即可。 StarterWare API 接口。 GPIOBank0Pin0PinMuxSetup(); 数据发送源码 数据发送配置。 使用 StarterWare 的库来设置数据发送。 使用时,直接包含“uart.h”文件 即可。 StarterWare API 接口。 void UARTCharPut(unsigned int baseAdd, unsigned char byteTx) 数据接收源码 数据接收配置。 使用 StarterWare 的库来设置数据接收。 使用时,直接包含“uart.h”文件 即可。 StarterWare API 接口。 int UARTCharGet(unsigned int baseAdd) 三、操作现象 实验设备 本实验使用的硬件接口为UART1 RS232接口,所需硬件为实验板、仿真器、RS232 交叉串口母母线、USB转RS232串口线和电源。 硬件连接 (1)使用 RS232 交叉串口母母线和 USB 转 RS232 串口线连接实验板的UART1串口和电脑的 USB 口。 (2)连接仿真器和电脑的USB接口, (3)将拨码开关拨到DEBUG模式01111,连接实验箱电源,拨动电源开关上电。 软件操作 串口端口查询 (1)先在设备管理器查看串口的端口号; (2)再设置串口调试工具,波特率设置为115200。 CCS里相关操作 导入工程,选择Demo文件夹下的对应工程 编译工程 将CCS连接实验箱并加载程序 点击运行程序,串口终端会打印相关信息 通过电脑键盘输入任意字符,可在串口终端回显。 实验结束后,先点击黄色按钮暂停程序运行,再点击红色按钮退出CCS与实验箱的连接,最后实验箱断电即可。
  • 2024-1-4 14:18
    199 次阅读|
    0 个评论
    一、实验目的 学习RGB24图像灰度转换的原理,掌握图像的读取方法,并实现在LCD上显示灰度转换前后的图像。 二、实验原理RGB24图像灰度转换 RGB颜色空间作为一种常用的彩色图像表示模型,分别用红(R)、绿(G)、蓝(B)三原色的组合来表示每个像素的颜色。一般情况下,RGB彩色图像灰度化有三种转化方案: (1)加权平均法 (2)平均值法:对彩色图像的每个像素中的R、G、B三个分量的值进行简单的算术平均,将得到的平均值作为灰度图像对应像素的亮度值。 (3)最大值法:将彩色图像的每个像素中的R、G、B三个分量中的最大值作为灰度图对应像素的灰度值。 RGB24图像灰度转换:加权平均法 所谓加权平均法就是根据三基色的重要性及其他指标,将R、G、B三个分量以不同的权值进行加权平均。由于人眼对绿色的敏感最高,对蓝色敏感最低,因此我们可以按照下式对R、G、B三分量进行加权平均,则能得到较合理的灰度图像。 而实际应用时,希望避免低速的浮点运算,所以需要整数算法,变种的公式: Gray = (R 30 + G 59 + B*11 + 50) / 100 整数算法已经很快了,但是最后的除法仍制约了速度。移位比除法快多了,所以可以将系数缩放成 2 的整数幂。 本实验使用8位精度,2 的 8次幂是256,所以这样计算系数 0.299 * 256 = 76.544 ≈ 76 0.587 * 256 + (0.544) = 150.272 + 0.264 = 150.816 ≈ 150 0.114 * 256 + (0.816) = 29.184 + 0.896 = 30.08 由于四舍五入会有较大的误差,所以将以前的计算结果的误差一起计算进去,舍入方式是去尾法。移位优化之后,8位精度系数,如下: Gray = (R 76 + G 8 程序流程设计 程序流程设计中首先要进行外设使能配置,接着进行LCD管脚复用配置和LCD中断配置,然后进行LCD显示的初始化,最后读取工程目录下的BMP图像并进行RGB24图像的灰度转换处理,将图像数据显示到LCD上。 三、操作现象实验设备 本实验使用的硬件接口为LCD,所需硬件为实验板、仿真器、LCD和电源。 硬件连接 (1)连接仿真器和电脑的USB接口, (2)将拨码开关拨到DEBUG模式01111,连接实验箱电源,拨动电源开关上电。 软件操作 导入工程,选择Demo文件夹下的对应工程 编译工程,生成可执行文件 将CCS连接实验箱并加载程序 程序加载完成后点击运行程序 运行程序后,CCS的Console窗口会打印相关信息,同时LCD会显示标题。 稍等片刻后,图像处理完成,LCD会显示灰度转换处理前后的图片。 实验结束后,先点击黄色按钮暂停程序运行,再点击红色按钮退出CCS与实验箱的连接,最后实验箱断电即可。
  • 2023-12-7 10:49
    547 次阅读|
    0 个评论
    遇到的问题 问题的发现 最近在开发DSP和STM32之间通信的一个项目,发现当STM32突然掉电后,即使重新上电,他们之间的通信也还是不能重连。 问题排查 之后进行排查:首先使用USB转TTL模块直接连接电脑和STM32,查看串口调试助手发现可以进行通信。之后使用相同的方法连接TMS320F28379D和电脑,查看串口调试助手,发现通信失败。此时可以确定,问题出在TMS320F28379D上。这时候通过将问题复现,前后查看寄存器,发现DSP串口的寄存器变化如下: 正常通信 出错状态 在这里大概就已经能确定问题了,DSP在串口通信突然中断时,会置位RX ERROR。根据以往经验,这时候只需要在通信错误后,将相关寄存器置0即可。 相关知识 串行通信接口(SCI)模块的功能和操作。 SCI是一种双线异步串行端口,通常称为UART。 SCI模块支持CPU和使用标准非归零(NRZ)格式的其他异步外设之间的数字通信。 SCI接收器和发送器每个都有一个16级深FIFO,用于减少服务开销,每个都有自己独立的使能和中断位。 两者都可以独立操作以进行半双工通信,或同时进行全双工通信。为了指定数据完整性,SCI检查接收到的数据是否存在中断检测,奇偶校验,溢出和帧错误。 比特率可通过16位波特选择寄存器编程为不同的速度。 由RXRDY和BRKDT位产生的中断由RX / BK INT ENA位(SCICTL2,位1)控制。 RX ERROR位产生的中断由RX ERR INT ENA位(SCICTL1,位6)控制。RXERR可以通过BRKDT,FE,OE,PE标志设置。 在FIFO模式下,BRKDT中断仅通过RXERR标志。 解决方法 解决流程 1.使能SCI接收错误中断 2.当发生SCI接收错误时,进入SCI接收中断,判断标志位 RX ERROR 是否置1(如果是SCI接收错误导致进入中断, RX ERROR自然为1) 3.当 RX ERROR 置1,执行一次完整的SW RESET,退出中断 具体程序 使能接收错误中断: SCI_enableInterrupt(SCIC_BASE, SCI_INT_RXFF | SCI_INT_RXERR ); void initSCICFIFO() { SCI_setConfig(SCIC_BASE, DEVICE_LSPCLK_FREQ, 115200, (SCI_CONFIG_WLEN_8 |SCI_CONFIG_STOP_ONE |SCI_CONFIG_PAR_NONE)); SCI_enableModule(SCIC_BASE); SCI_disableLoopback(SCIC_BASE); SCI_resetChannels(SCIC_BASE); SCI_enableFIFO(SCIC_BASE); SCI_enableInterrupt(SCIC_BASE, SCI_INT_RXFF | SCI_INT_RXERR ); SCI_disableInterrupt(SCIC_BASE, SCI_INT_TXFF); SCI_setFIFOInterruptLevel(SCIC_BASE, SCI_FIFO_TX1, SCI_FIFO_RX1); SCI_performSoftwareReset(SCIC_BASE); SCI_resetTxFIFO(SCIC_BASE); SCI_resetRxFIFO(SCIC_BASE); #ifdef AUTOBAUD SCI_lockAutobaud(SCIA_BASE); #endif } 在中断处理函数中判断是否为错误中断触发的,如果是,就置位。 __interrupt void scicRXFIFOISR(void) { receivedDataC=SCI_readCharNonBlocking(SCIC_BASE); rxStatus_C = SCI_getRxStatus(SCIC_BASE); if((rxStatus_C & SCI_RXSTATUS_ERROR) != 0) { SCI_clearInterruptStatus(SCIC_BASE, SCI_INT_RXERR); } SCI_clearOverflowStatus(SCIC_BASE); SCI_clearInterruptStatus(SCIC_BASE, SCI_INT_RXFF); Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP8); loopCounter ++; }
  • 热度 1
    2023-11-30 10:21
    162 次阅读|
    0 个评论
    一、实验目的 学习直方图统计的原理,掌握图像的读取方法,并实现在LCD上显示灰度图像的直方图统计结果。 二、实验原理灰度直方图 灰度直方图是关于灰度级分布的函数,是对图像中灰度级分布的统计。灰度直方图是 将数字图像中的所有像素,按照灰度值的大小,统计其出现的频率。灰度直方图是灰度 级的函数,它表示图像中具有某种灰度级的像素的个数,反映了图像中某种灰度出现的频率。 直方图是用来整理计量值的观测数据,分析其分布状态的统计方法,用于对总体的分布特征进行推断。直方图的作用如下: (1)检验数据分布的类型,分析数据是否服从正态分布,判断数据有无异常; (2)与产品规格界限做比较,可直观地判断分布中心是否偏离规格中心,以确定是否需要调整并求出其调整量;还可判断数据分布的散差(分布范围)是否满足规格范围的要求,以确定是否采取缩小散差的技术性措施; (3)用于进行过程能力调查和不合格品率估计; (4)客观地反映操作者的技术水平和主观努力程度。 从概率的观点来理解,灰度出现的频率可看作其出现的概率,这样直方图就对应于概率密度函数 pdf(probability density function),而概率分布函数就是直方图的累积和,即概率密度函数的积分。也可以直接从代表每种灰度的象素数目的直方图来观察。 灰度直方图的计算是很简单的,依据定义,若图象具有 L(通常 L=256,即 8 位灰度级)级灰度,则大小为 MxN 的灰度图象 f(x,y)的灰度直方图 hist 可用如下计算获得: (1)初始化 hist =0 ; k=0,…,L-1 (2)统计 hist ++ ; x, y =0,…,M-1, 0,…,N-1 (3)标准化 hist /=M*N 程序流程 程序流程设计中首先要进行外设使能配置,接着进行LCD管脚复用配置和LCD中断配置,然后进行LCD显示的初始化,最后读取工程目录下的BMP图像并进行直方图统计,并在 LCD 显示灰度值大 小的统计结果。 视频分析与视觉库 VLIB 是一个TI 的软件库,可加速视频分析开发并将性能提高多达 10 倍。VLIB 是针对 C6x DSP 内核优化的可扩展库。包括的40 多个内核的集合可以实现背景建模与减法、对象特征提取、追踪与识别和低级像素处理。 包括适用于 C64x+、C674x 和 C66x 处理器的 Windows 和 Linux 安装可执行文件。每个可执行文件安装一个组件包存储库、一个文档目录、一个 Eclipse 插件目录和一个扩展的组件目录结构,其中包含组件库、头文件和测试示例。 TMS320C6748处理器使用的是vlib_c674x_3_3_2_0。 vlib_c674x_3_3_2_0 将安装到CCS5.5 的安装路径,安装完成后会有相应的文件夹出现。源码所在路径:\vlib_c674x_3_3_2_0\packages\ti\vlib\src 程序源码 初始化缓存 使用VLIB 的库来为直方图计算进行缓存初始化。使用时,直接包含“VLIB_histogram_1D_Init_U8.h”文件 即可。 API 接口 VLIB_histogram_1D_Init_U8(const uint8_t *restrict binEdges,const int32_t numBins, uint8_t *restrict histArray); 程序使用VLIB 的库来进行灰度直方图统计前的缓存初始化,调用的程序源码和使用说明可以安装VLIB后查看。调用的初始化函数中,第一个参数是直方图的边界值,第二个参数是直方图的区间数。第三个参数是内部使用的缓冲器。 直方图计算 使用VLIB 的库来从 8 位无符号整数数组计算直方图。使用时,直接包含“VLIB_histogram_1D_U8.h”文件 即可。 API 接口 VLIB_histogram_1D_U8(const uint8_t *restrict X, const int32_t numX,const int32_t numBins,const uint16_t binWeight,const uint8_t *restrict histArray,uint16_t *restrict H1,uint16_t *restrict H2,uint16_t *restrict H3,uint16_t *restrict H); 程序使用VLIB 的库来进行灰度直方图统计,调用的程序源码和使用说明可以安装VLIB后查看。调用的直方图统计函数中,第一个参数是输入图像的数组,第二个参数是输入图像数组的元素个数。第三个参数是直方图的区间数。第四个参数是直方图中该区域的像素增量。第五个参数是指向内部使用的缓冲器。第六~第八个参数是指向内部使用的数组。第九个参数是用来保存直方图计算结果的数组。 三、操作现象实验设备 本实验使用的硬件接口为LCD,所需硬件为实验板、仿真器、LCD和电源。 硬件连接 (1)连接仿真器和电脑的USB接口, (2)将拨码开关拨到DEBUG模式01111,连接实验箱电源,拨动电源开关上电。 软件操作 导入工程,选择Demo文件夹下的对应工程 编译工程,生成可执行文件 将CCS连接实验箱并加载程序 程序加载完成后点击运行程序 运行程序后,CCS的Console窗口会打印相关信息,同时LCD会显示标题。 稍等片刻后,图像处理完成,LCD会显示直方图的统计结果。 实验结束后,先点击黄色按钮暂停程序运行,再点击红色按钮退出CCS与实验板的连接,最后实验箱断电即可。
  • 2023-11-22 14:51
    305 次阅读|
    0 个评论
    一、实验目的 了解信号抽样的基本内容,学习AD7606采集波形的实现,实现外部信号的抽样与恢复并在LCD上显示结果。 二、实验原理抽样定理 抽样定理,又称采样定理,香农采样定理,奈奎斯特采样定理,只要采样频率大于或等于有效信号最高频率的两倍,采样值就可以包含原始信号的所有信息,被采样的信号就可以不失真地还原成原始信号。抽样定理是通信理论中的一个重要定理,是模拟信号数字化的理论依据。时域采样定理: (1)频带为F的连续信号f(t)可用一系列离散的采样值f(t1),f(t1±Δt),f(t1±2Δt),...来表示,只要这些采样点的时间间隔Δt≤F/2,便可根据各采样值完全恢复原来的信号f(t)。 (2)当时间信号函数f(t)的最高频率分量为f_M时,f(t)的值可由一系列采样间隔小于或等于f_M/2的采样值来确定,即采样点的重复频率f≥2f_M。 对连续时间正弦信号考虑下面的表达式: 可以按抽样频率f_s=1/T_s对x(t)抽样来获得离散时间信号: 如果不能满足抽样定理,抽样后信号的频率就会重叠,即高于采样频率一半的频率成分将被重建成低于采样频率一半的信号。这种频谱的重叠导致的失真称为混叠,就不能恢复成原始信号。以下两种措施可避免混叠的发生: (1)提高采样频率,使之达到最高信号频率的两倍以上(本实验使用的方法); (2)引入低通滤波器或提高低通滤波器的参数;该低通滤波器通常称为抗混叠滤波器,抗混叠滤波器可限制信号的带宽,使之满足采样定理的条件。 外部输入信号 本实验中,外部输入信号的抽样实现是通过实验板上的波形发生器AD9833输出正弦波连续信号, AD7606 采集波形后得到对应的离散信号数据,最后DSP对采集到的离散信号进行处理,比如FFT运算,最后LCD显示。 AD9833特性 (1)AD9833是一款低功耗、可编程波形发生器,能够产生正弦波、三角波和方波输出,输出频率和相位可通过软件进行编程,调整简单。 (2)AD9833通过一个三线式串行接口写入数据。该串行接口能够以最高40MHz的时钟速率工作,并且与DSP和微控制器标准兼容。 AD7606特性 (1)8 路16bit采样通道。 (2)支持串行和并行读取方式。 (3)支持全部通道 200K 采样率并行采集和转换。 (4)支持真正±10V 或±5V 的双极性信号输入。 AD7606上8个通道的数据是同时采集,轮流转换的。 模数转换模块的处理过程如下: (1)模数转换模块接到启动转换信号后,按照排序器的设置,开始转换第一个通道的数据; (2)经过一个采样时间的延迟后,将采样结果放入转换结果寄存器保存; (3)按顺序进行下一个通道的转换; (4)如果为连续转换方式则从新开始转换过程; (5)否则等待下一个启动信号。 程序流程设计 设计中首先要进行LCD初始化,例如外设使能配置、LCD管脚复用配置、中断配置、显示初始化等。然后初始化AD7606并启动转换,接着初始化AD9833并输出正弦波信号,AD7606对信号进行抽样转换,抽样后将信号转为复数模式,接着对抽样信号进行FFT变换,并在在LCD上显示抽样的结果。最后进行触摸检测,控制AD采样的暂停和启动。 函数源码 FFT运算函数 使用 DSPLIB 的库来进行FFT运算。使用时,直接包含“DSPF_sp_fftSPxSP.h”文件 即可。 API接口 void DSPF_sp_fftSPxSP(int N, float *ptr_x, float *ptr_w, float *ptr_y, unsigned char *brev, int n_min, int offset, int n_max); 程序使用 DSPLIB 的库来进行FFT运算,调用的程序源码和使用说明可以安装DSPLIB后查看。调用的FFT函数中,第一个参数是样本中 FFT 的长度,第二个参数是指向数据输入的指针。第三个参数是指向复杂旋转因子的指针。第四个参数是指向复杂输出数据的指针。第五个参数是指向包含 64 个条目的位反转表的指针。如果样本的FFT长度可以表示为 4 的幂,第六个参数是4,否则 第六个参数是 2 。第七个参数是从主FFT开始的样本中的子 FFT偏移索引 。 第八个参数是样本中主FFT的大小。 FFT逆变换函数 使用 DSPLIB 的库来进行FFT逆变换。使用时,直接包含“DSPF_sp_ifftSPxSP.h”文件 即可。 API接口 void DSPF_sp_ifftSPxSP (int N, float *ptr_x, float *ptr_w, float *ptr_y, unsigned char *brev, int n_min, int offset, int n_max); 程序使用 DSPLIB 的库来进行FFT逆变换,调用的程序源码和使用说明可以安装DSPLIB后查看。调用的IFFT函数中,第一个参数是样本中 FFT 的长度。第二个参数是指向数据输入的指针。第三个参数是指向复杂旋转因子的指针。第四个参数是指向复杂输出数据的指针。第五个参数是指向包含 64 个条目的位反转表的指针 。如果样本的FFT长度可以表示为 4 的幂,第六个参数是4,否则第六个参数是2 。第七个参数是从主FFT开始的复杂样本中的子FFT偏移索引 。第八个参数是样本中主FFT的大小。 三、操作现象 实验设备:本实验使用的硬件接口为LCD,所需硬件为实验板、仿真器、公头对公头 SMA 连接线、LCD和电源。 硬件连接 (1)使用公头对公头SMA连接线连接波形发生器和ADC输入的V1通道。 (2)连接仿真器和电脑的USB接口。 (3)将拨码开关拨到DEBUG模式01111,连接实验箱电源,拨动电源开关上电。 软件操作 导入工程,选择Demo文件夹下的对应工程 编译工程,生成可执行文件 将CCS连接实验箱并加载程序 程序加载完成后点击运行程序 运行程序后,LCD会显示抽样的离散信号波形,上半幅图为离散抽样信号,横坐标X为时间,采样点的时间间隔为1ms。下半幅图为离散抽样信号的频谱图,频谱近似等于AD9833产生的连续信号频谱 100。 实验结束后,先点击左上角的黄色按钮暂停程序运行,再点击红色按钮退出CCS与实验板的连接,最后实验箱断电即可。
相关资源