CCS3.3图片翻转与反色_C6416
流程图
Created with Raphaël 2.2.0
开始
CCS3.3 set up小项目
C program
分配寄存器
load data(图片)
view image以及编译运行
结束
yes
1.CCS3.3 set up小项目
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210101120839147.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzUwODUyNzE4,size_16,color_FFFFFF,t_70#pic_center)
2.program导入
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210101121427303.PNG)
3.分配寄存器
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210101122141783.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzUwODUyNzE4,size_16,color_FFFFFF,t_70#pic_center)
4.image导入
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210101122845387.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzUwODUyNzE4,size_16,color_FFFFFF,t_70#pic_center)
5.确定图片样式并观察
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210101122243419.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzUwODUyNzE4,size_16,color_FFFFFF,t_70#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210101121920221.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzUwODUyNzE4,size_16,color_FFFFFF,t_70)
6.编译1运行2,注意:编译一次LOAD PROGRAM一次。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210101122424363.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzUwODUyNzE4,size_16,color_FFFFFF,t_70) 7.输入新地址观察image ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210101122639149.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzUwODUyNzE4,size_16,color_FFFFFF,t_70#pic_center)
下面展示代码。
#include
#include "intr.h"
#include
#include
#include
#include "timer.h"
#include "function.h"
#include "regs.h"
#include "declare.h"
void InitEMIF(void)
{
*(int *)EMIFA_GCTL = 0x0009207C;//设置标志控制字
*(int *)EMIFA_CE0 = 0xFFFFFF43;//0x20d2c321;//32位宽同步程序存储,读取图像数据(见外设指南10-21,控制4MTYPE)
*(int *)EMIFA_CE0SEC= 0x00000040;//附加寄存器,0周期读等待,CE0空间同步到ECLKOUT2(见外设指南10-21)
*(int *)EMIFA_CE1 = 0xFFFFFF43;//0x20d2c321;//32位宽同步程序存储,读取图像数据(见外设指南10-21,控制4MTYPE)
*(int *)EMIFA_CE1SEC= 0x00000040;//附加寄存器,0周期读等待,CE0空间同步到ECLKOUT2(见外设指南10-21)
*(int *)EMIFA_CE2 = 0xFFFFFF23;//同步,控制系数
*(int *)EMIFA_CE2SEC= 0x00000040; //附加寄存器,CE2空间同步到ECLKOUT1
*(int *)EMIFA_CE3 = 0xFFFFFF23;//0x20d2c321;//32位宽同步程序存储
*(int *)EMIFA_CE3SEC= 0x00000040;//附加寄存器,CE3空间同步到ECLKOUT2
return;
}
//中断初始化模块 (DSP 支持1个NMI不可屏蔽中断,12个可屏蔽中断(INT4-15,4最高,15最低)
void Initinter(void)
{
intr_reset();//中断复位
*(volatile int*)0x01A0FFE8=0x100;//通道中断使能低位寄存器,CIERL
//intr_hook(dmaserver0,CPU_INT4); //清零中断挂起
//int_hook(dmaserver1,CPU_INT5);
INTR_ENABLE(CPU_INT4); //使能中断
INTR_ENABLE(CPU_INT5);
INTR_ENABLE(CPU_INT_NMI);
INTR_GLOBAL_ENABLE();
return;
}
void main()
{
unsigned char *cp,*cp1;
short *cpp,*cpp1;
int i,j,x,y;
int b=45,i0=480,j0=270;
cpp=(short *)0x40000;
cpp1=(short *)0x40000;
cp=(unsigned char *) 0x80000000;//地址分配
cp1=(unsigned char *)0xA0000000;
InitEMIF(); //EMIF配置
for(j=0;j
x=(i-i0)*cos(3.14/180.0 * b)-(j-j0)*sin(3.14/180.0 * b)+560;//以(i0,j0)为中心旋转b度,560为对角线长度一半,即540和960的平方和再开方
y=(i-i0)*sin(3.14/180.0* b)+(j-j0)*cos(3.14/180.0 * b)+560;
cp1[x*2000+y]=cp[i*960+j];//新行数要大于对角线长度
}
}
//ISTP=0x400; //中断向量指针,烧写时不能少(在仿真状态下挂起,烧写时放开) 指针寄存器,初始化中断时使用,规定这个状态字
Initinter(); //中断初始化
while(1)
{
;
}
}
结果展示
由于实验过程是对DSP运行的模拟,所以需耗费较长时间,进行到中间这种程度已经等待五分钟。若要加快速度,可通过优化编译器(C优化器优化),优化代码(内联函数的使用、软件流水等)。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/2021010310061734.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzUwODUyNzE4,size_16,color_FFFFFF,t_70#pic_center)
|