Chipscope 仿真VmodCAM IIC程序
Chipscope 仿真VmodCAM IIC程序:
目的:熟悉EDK中建立chipscope
注意:zedboard使用digilent USB下载时,chipscope不能和SDK同时使用,否则芯片会死机。要用仿真器烧写程序。
1:搭建硬件平台
2:编写SDK软件
0x30,0x00,0x00,0x00, // Chip version. Default 0x1580 !! only for read !!
0x33,0x86,0x05,0x01, // MCU Reset
0x32,0x90,0x00,0x01, // test pattern
0x32,0x92,0x00,0x00, // R pattern
0x32,0x94,0x00,0xff, // G pattern
0x32,0x96,0x00,0x00, // B pattern
0x33,0x86,0x05,0x00, // MCU Release from reset
0x32,0x14,0x0D,0x85, // Slew rate control, PCLK 5, D 5
0x34,0x1E,0x8F,0x09, // PLL control; bypassed, powered down
0x34,0x1C,0x02,0x30, // PLL dividers; M=80,N=2,fMCLK=fCLKIN*M/(N+1)/8=24MHz
0x34,0x1E,0x8F,0x09, // PLL control; Power-up PLL; wait 1ms after this!
0x34,0x1E,0x8F,0x08, // PLL control; Turn off bypass
0x32,0x02,0x00,0x08, // Standby control; Wake up
0x33,0x8C,0x27,0x97, // Output format; Context B shadow
0x33,0x90,0x00,0x20, // RGB with BT656 codes
0x33,0x8C,0x27,0x2F, // Sensor Row Start Context B
0x33,0x90,0x00,0x04, // 4
0x33,0x8C,0x27,0x33, // Sensor Row End Context B
0x33,0x90,0x04,0xBB, // 1211
0x33,0x8C,0x27,0x31, // Sensor Column Start Context B
0x33,0x90,0x00,0x04, // 4
0x33,0x8C,0x27,0x35, // Sensor Column End Context B
0x33,0x90,0x06,0x4B, // 1611
0x33,0x8C,0x27,0x07, // Output width; Context B
0x33,0x90,0x02,0x80, // 640
0x33,0x8C,0x27,0x09, // Output height; Context B
0x33,0x90,0x01,0xE0, // 480
0x33,0x8C,0x27,0x5F, // Crop X0; Context B
0x33,0x90,0x00,0x00, // 0
0x33,0x8C,0x27,0x63, // Crop Y0; Context B
0x33,0x90,0x00,0x00, // 0
0x33,0x8C,0x27,0x61, // Crop X1; Context B
0x33,0x90,0x06,0x40, // 1600
0x33,0x8C,0x27,0x65, // Crop Y1; Context B
0x33,0x90,0x04,0xB0, // 1200
0x33,0x8C,0x27,0x41, // Sensor_Fine_IT_min B
0x33,0x90,0x01,0x69, // 361
0x33,0x8C,0xA1,0x20, // Capture mode options
0x33,0x90,0x00,0xF2, // Turn on AWB, AE, HG, Video
0x33,0x8C,0xA1,0x03, // Refresh Sequencer Mode
0x33,0x90,0x00,0x02, // Capture
0x33,0x90,0x00,0x00, // Read until sequencer in mode 0 (run)
0x30,0x1A,0x02,0xCC, // reset/output control; parallel enable, drive pins, start streaming
/*****************************************************************************/
/**
* This function is initial the iic_0.
*
* @param None.
*
* @return The number of bytes sent.
*
* @note None.
*
****************************************************************************/ int IIC_Initial( XIic *IicInstance, u16 DeviceId)
{ XIic_Config *IICConfigPtr; /* Pointer to configuration data */
Xil_AssertNonvoid(IicInstance != NULL);
/*
* Initialize the IIC driver so that it is ready to use.
*/
IICConfigPtr = XIic_LookupConfig(DeviceId);
if (IICConfigPtr == (XIic_Config *) NULL) {
IicInstance->IsReady = 0;
return (XST_DEVICE_NOT_FOUND);
}
return XIic_CfgInitialize(IicInstance, IICConfigPtr,IICConfigPtr->BaseAddress); }
int Vmod_CameraA_IIC_Config()
{
unsigned ByteCount=0;
int i = 0;
u8 ReadCamera_ChipVersion_Add[2] = {0x30,0x00};
u8 ReadCamera_ChipVersion_Rdata[2];
u16 Chip_Version = 0; printf("Here we go\n");
printf("Config the Camera\n");
read_camera_config(XPAR_CAMER_IIC_A_BASEADDR,ReadCamera_ChipVersion_Add,ReadCamera_ChipVersion_Rdata);
Chip_Version = (ReadCamera_ChipVersion_Rdata[0] << 8) | ReadCamera_ChipVersion_Rdata[1];
printf("Read Chip Version is:0x%x\n",Chip_Version);
for(i=0;i<MT9D112_CONFIG_BUFFER_ROWS;i++)
{
ByteCount += XIic_Send(XPAR_CAMER_IIC_A_BASEADDR,CAMERA_ADDRESS_ID,MT9D112_CONFIG_BUFFER[i],4,XIIC_STOP);
}
if(MT9D112_CONFIG_BUFFER_ROWS*4 == ByteCount)
{
printf("Camera Initialize success\n");
printf("Camera Initialize ByteCount is:%d\n",ByteCount);
return ByteCount;
}
else printf("Camera Initialize fail\n");
}
void read_camera_config (u32 BaseAddress, u8 *sub_addr, u8 *RdData)
{
u8 sent_byte_count;
u8 received_byte_count; RdData[0] = 0;
RdData[1] = 0; xil_printf("Read\t"); sent_byte_count = XIic_Send(BaseAddress, 0x78>>1, sub_addr, 2, XIIC_STOP); //write sub-address if (sent_byte_count != 2)
xil_printf("Sent %d bytes\t", sent_byte_count); received_byte_count = XIic_Recv(BaseAddress, 0x79>>1, RdData, 2, XIIC_STOP); //read 2 byte datas if (received_byte_count != 2)
xil_printf("Received %d bytes\r\n", received_byte_count);
else
xil_printf("0x%02x 0x%02x\r\n", RdData[0], RdData[1]); }
3:ChipScope 调试
4 VmodCAM
硬件写地址0x78 读地址0x79
访问方式:
1、通过直接的硬件寄存器访问
2、通过驱动变量进行配置,这种配置都是靠R[0X338C]与R[0X3390]两个硬件寄存器间接访问,R[0X338C]是选择驱动变量的寄存器,R[0X3390]则是设置对应驱动变量的值。
图 1 驱动变量地址
供电与复位:
配置操作:
寄存器上电的初始值
首先就可以读取摄像头的ID 地址是R[0X3000],读取的ID应该是0X1580.
然后复位MCU
PLL 时钟配置:
PLL配置包括R[0X341C]用于PLL输出(PCLK)频率设置。PCLK = MCLK*M/((N+1)/8), R[0X341E]用于设置PLL工作与否 还有旁路有否。如果想要旁路掉PLL那么R[0X341E]【0】必须设置为1,如果有功耗要求,可以将R[0X341E]【1】设置为1来关闭PLL 。如果要打开PLL,那么以上两位必须设置为0.在默认情况下,都是关闭和旁路掉PLL的。
Any changes to PLL settings must be done with PLL bypassed (R0x341E[0]=1). (当需要修改PLL的参数时必须保持PLL在旁路状态)
PLL programming and power-up sequence is as follows:
1. Program PLL frequency settings, R0x341C (pll_m, pll_n) (master clock frequency is
equal to fVCO_pll/8). With default settings master clock frequency of 80 MHz is
obtained with fCLKIN=16MHz.
2. Power up PLL, R0x341E[1] = 0.
3. Wait for PLL settling time > 1ms.
4. Turn off PLL bypass, R0x341E[0] = 0.
Chipscope 仿真VmodCAM IIC程序的更多相关文章
- STM32F10X -- 模拟IIC程序
听说STM32的IIC硬件做的很鸡肋,所以在这里通过模拟的方式实现IIC协议.此程序能成功对AT24C02操作. 程序中的带参数宏 IIC_DELAY(time)的功能是延时time us,在实际中具 ...
- 第2章 PLC1200 与HMI (TP900) 组合仿真连接 编写1200程序,编写HMI 仿真过程拍摄视频
博途V13 与 WINCC PROFESSIONAL V13 创建一个PLC工程 和屏幕的 练习. 在做S1200与 HMI的仿真之前 需要设置控制面板 设置PG/PC口 巡视窗口用于看设备的一些属性 ...
- matlab 调用C程序进行simulink仿真
文章目录 simulink仿真 创建C程序 编译C程序 运行结果 simulink仿真 simulink仿真中需要使用S-Function模块,可以实现调用C程序进行仿真,下面先建立一个简单的仿真: ...
- 基于KEIL4开发ARM9(S3C2440)的裸机程序
本文主要介绍如何使用Keil4开发ARM9(S3C2440)裸机程序. 说明: 一.平台: 操作系统:Windows XP系统 KEIL版本:4.73 开发板:ARM9(S3C2440) 二.建立工程 ...
- stm32软件模拟IIC读取PX4FLOW光流传感器数据
这段时间在做全国光电设计大赛,用到了px4的px4flow光流传感器,用软件模拟iic读取数据不定期会导致px4flow死机,查了资料和光流的源码,发现这个光流用了stm32的硬件iic,所以对软件模 ...
- ModelSim仿真入门
ModelSim仿真入门之一:软件介绍 编写这个教程之前,为了让不同水平阶段的人都能阅读,我尽量做到了零基础入门这个目标,所有的操作步骤都经过缜密的思考,做到了详细再详细的程度. 如果您是FPGA开发 ...
- 【译】基于主机的卡仿真(Host-based Card Emulation)
基于主机的卡仿真(Host-based Card Emulation) 能提供NFC功能很多Android手机已经支持NFC卡模拟.在大多数情况下,该卡是由设备中的单独的芯片仿真,所谓的安全元件.由无 ...
- ROS_Kinetic_x 基於ROS和Gazebo的RoboCup中型組仿真系統(多機器人協作)
國防科學技術大學發布了RoboCup中型組仿真平臺,基於ROS和Gazebo設計. 該平臺可以用於多機器人協作研究.參考資料如下: ROS新聞:1 http://www.ros.org/news ...
- DVB-C系统中QAM调制与解调仿真
本文简单记录一下自己学习<通信原理>的时候调试的一个仿真DVB-C(Cable,数字有线电视)系统中QAM调制和解调的程序.自己一直是研究"信源"方面的东西,所以对&q ...
随机推荐
- hash_map map
什么时候需要用hash_map,什么时候需要用map? 总体来说,hash_map 查找速度会比map快,而且查找速度基本和数据数据量大小,属于常数级别;而map的查找速度是log(n)级别.并不一定 ...
- 高性能HTTP加速器Varnish安装与配置
导读 Varnish是一款高性能且开源的反向代理服务器和HTTP加速器,它采用了全新的软件体系结构,和现在的硬件体系配合紧密.下面就由我给大家简单说说他的安装与配置. 安装 安装pcre 如果没有安装 ...
- mysql中如何嵌套使用insert和select
如何在mysql从多个表中组合字段然后插入到一个新表中,通过一条sql语句实现.具体情形是:有三张表a.b.c,现在需要从表b和表c中分别查几个字段的值插入到表a中对应的字段.对于这种情况,我们可以使 ...
- 简约之美Jodd-http--应用一箩筐
Jodd-http是一个微型的.简约的http client,然而简单而且方便.使用它可以轻松的实现发送请求和读取响应.它的目标就是日常应用变的非常简单,从而简化开发人员的工作. 了解Jodd-htt ...
- git 修改commit信息
可以使用 git commit --amend 修改上一次的提交信息. 操作示例 如下: git commit --amend 后会出现编辑界面,如下 可以在最上面红框的地方,修改要提交的信息,然后按 ...
- 自定义强大的C#网络操作基础类(NetHelper)
using System; using System.Text;using System.Net.Sockets;using System.Net.Mail;using System.Net; nam ...
- FOR XML PATH 解决联接返回结果集各记录问题
FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作.那么以一个实例为主 ...
- B - 娜娜梦游仙境系列——跳远女王
B - 娜娜梦游仙境系列——跳远女王 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Other ...
- solrj-WiKi
solrj是一个访问solr的客户端,它提供了一个接口,用于添加.更新.删除索引数据. solrj跨版本兼容 solrj一般保持向后兼容,所以你可以使用新版本的solrj访问老版本的solr服务,也可 ...
- D3D11 Query查询耗时
确实的来说,这是个Debug/Profile的需求,在运行期这个时间毫无意义,有意义的是两帧之间走过了多少时间,而这个,可以用来查询某一个效果所用耗时,废话不多少,进入正题. 首先要创 ...