CCS3.3图片翻转与反色_C6416
流程图
1.CCS3.3 set up小项目
2.program导入
3.分配寄存器
4.image导入
5.确定图片样式并观察
6.编译1运行2,注意:编译一次LOAD PROGRAM一次。
7.输入新地址观察image
下面展示代码
。
#include <c6x.h>
#include "intr.h"
#include <stdio.h>
#include <mathf.h>
#include <math.h>
#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<960;j++)//因为图片为540*960,故540列960行
{
for(i=0;i<540;i++) //按行连接数组,行在内循环
{
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优化器优化),优化代码(内联函数的使用、软件流水等)。