- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
OV9650裸机arm9实现过程
具体实现的功能:通过摄像头OV9650采集视频图像,并与arm9的camera interface相连接,把采集到的数据放入内存的某段区域中,将该段区域同时设置成LCD的数据缓存区,这样采集到的数据就可以直接在LCD显示屏上显示了
实现该功能主要完成的工作:设置OV9650的内部寄存器(寄存器很多,最好直接网上下载个对应功能的寄存器设置表),Camera Interface的各个寄存器配置,arm9的LCD各个寄存器配置
实现流程:
初始化摄像头硬件接口和时钟
CamReset(); //摄像软件重启
rCLKCON |= (119); // 设置时钟控制寄存器使能Camera,控制HCLK进入Camera块
CamPortSet(); //配置各个引脚的功能GPJ和GPG
ChangeUPllValue(56, 2, 1); // UPLL clock = 96MHz, PLL input 12MHz
rCLKDIVN|=(13); //根据UPLL为96MHz设置UCLK为48MHz
SetCAMClockDivider(CAMCL; //设置摄像头时钟为24MHz
void CamReset(void){
void CamReset(void)
{
rCIGCTRL |= (131); //Camera Interface全局控制寄存器
Delay(10);
rCIGCTRL = ~(131);
}
void CamPortSet(void){
void CamPortSet(void)
{
save_GPJCON = rGPJCON; //保存GPJ的初始设置
save_GPJDAT = rGPJDAT;
save_GPJUP = rGPJUP;
rGPJCON = 0x2aaaaaa; //配置GPJ的引脚功能,使GPJ0~GPJ7为CAMDATA[0]~CAMDATA[7]
rGPJDAT = 0; //GPJ8为CAMPCLK,GPJ9为CAMVSYNC,GPJ10为CAMHREF,GPJ11为CAMCLKOUT,GPJ12为CAMRESET
rGPJUP = 0; //将管脚数据初始为0,上拉电阻使能
rGPGCON = ~(322); //GPG11引脚设置为input功能,而不是EINT[19]
rGPGCON |= 122;
rGPGUP |= 111;
rGPGDAT = ~(111);
}
void ChangeUPllValue(int mdiv,int pdiv,int sdiv){
void ChangeUPllValue(int mdiv,int pdiv,int sdiv)
{
rUPLLCON = (mdiv12) | (pdiv4) | sdiv;
}
void SetCAMClockDivider(int divn) {
void SetCAMClockDivider(int divn)
{
rCAMDIVN = (rCAMDIVN ~(0xf))|(14)|(divn); // CAMCLK is divided..
}
检测OV9650与arm9接上与否,接上则配置OV9650的寄存器Test_OV9650(void)
int ret;
CamModuleReset(); //重启外接Camera
OV9650_init(); //本程序是模拟IIC,所以GPE14、15两个引脚根据程序情况设置为输入输出模式,而非IIC模式
printk(Check camera ID\n);
ret = check_OV9650() ;
//通过模拟IIC来读取OV9650摄像头的厂商ID和产品ID的寄存器,来判断是否检测到设备,返回0,则检测到
if (ret)
{
printk(Cant find camera!\n);
return ret;
}
//Uart_Printf(\nshentuhongfeng test 11\n);
printk(Initial Camera now, Please wait several minutes...\n);
OV9650_config(); //OV9650的寄存器配置,由于OV9650的寄存器很多,一般下载配置表配置就行
return 0;
static void CamModuleReset(void){
static
文档评论(0)