CCS3.3图片翻转与反色_C6416

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小项目

在这里插入图片描述

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优化器优化),优化代码(内联函数的使用、软件流水等)。
在这里插入图片描述

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值