我的DM648视频处理电路板做好了,找人合作开发一些基础单元:
请求开发的内容:
1、视频捕获,得到视频画面数据
2、视频显示,通过adv7390输出
3、通过I2c读写24c256
4、通过I2c写单片机
视频捕获、显示芯片都是通过I2C初始化的,实际上是:视频捕获、显示、I2C基础程序。
在这里请大家给我一些建议:我得花多少币子才能找到合作者人?咱们论坛里有没有能搞的?
user3969552:
开发一款新的DSP怎么这么难尼?
pengpeng gong:
回复 user3969552:
1.DM648 不是TI主流推荐的CPU, 所以他的开发用户比较少,在10-13年 用DM648+DM368 做智能交通的方案的比较多,现在很少了。
2.我以前开发是用CCS3.3 和重大的560V1 仿真器 比较方便。
3.他是64X+的内核 不需要SYS/BIOS DSP/BIOS5.4 或者5.3这样的版本就OK了。
4.xdc 对于单核的DM648 是没有必要安装的,我就没有用过他。
你就用CCS3.3 开发难度其实 和以前的DM642 差不多的。
user3969552:
回复 user3969552:
努力进取
user3969552:
回复 pengpeng gong:
感谢pengpeng gong 指导!
我打算绝地反击,不用系统、库类了,芯片寄存器级研究,像早期的单片机编程那样搞了,鉴于外国公司的保守与垄断,我共享我的研究,和中国广大电子、软件爱好者共同提高,希望同仁也能帮助我,解答我的困惑。今天开始研究第一个芯片-CDCE913,网上关于CDCE9xx系列的中文资料几乎查不到,为此将学习笔记上传于此
mangui zhang:
回复 user3969552:
您太给力啦 支持您
将会一直关注
pengpeng gong:
回复 user3969552:
好吧 我支持你一下, 不跑操作系统 也可以,跑单片机用中断向量表来弄也可以, 只是这样你的开发的工作量 是不是太大了啊,? 会不会影响你的工作进程啊, 毕竟现在一般公司开发主要精力放在自己擅长的地方,
其实TI的648的 DVSDK还是挺好理解的, 虽然是DSP的下的, 但是还是和TI368的 DVSDK4.0的组织架构很相似的, 里面的驱动 很多都是参考linux的思想来的, 比如SEM 系统自己 弄了个40个 做个数组, 类似池子,让你申请, 替你做了保护机制。。。。还有很多。 你决定要 裸跑C的?
user3969552:
回复 pengpeng gong:
回pengpeng gong
感谢支持。现在板子还没做回来呢,我的板子很简单,把视频输入输出搞好了就大功告成了,我单片机搞多了,如果再把EDMA弄好了,基础硬件知识就丰富了,多学点底层的东西益处多多。同时。。。。。。
simon blak:
回复 user3969552:
搞TI的东西,感同身受。。。
顶你~~!
user3969552:
回复 user3969552:
妈了个巴子,专研了几个月DM648,好像入门了,我烦TI的BIOS、EVM参考、各种工具,搞得太复杂,我就用寄存器级直接编程。
试着搞了一个DM648读写24wc256的程序,板子未回,未经调试,共享一下:请大家看看程序是否有毛病?
DM648 I2C读写24c256程序:
void init_i2crw24c256(void){//严格按照手册中的前7步做//1. Enable the clock to the I2C peripheral by programming the Local Power and Sleep Controller(LPSC) tied with I2C peripheral.device_init();//2. Place I2C in reset (clear IRS = 0 in ICMDR).ICMDR = 0x0000; //复位// 0b00000000 00100000 ;/*3. Configure ICMDR:· Configure I2C as Master (MST = 1).· Indicate the I2C configuration to be used; for example, Data Receiver (TRX = 0)· Indicate 7-bit addressing is to be used (XA = 0).· Disable repeat mode (RM = 0).· Disable loopback mode (DLB = 0).· Disable free data format (FDF = 0).· Optional: Disable start byte mode if addressing a fully fledged I2C device (STB = 0).· Set number of bits to transfer to be 8 bits (BC = 0).*///i2c mode registerICMDR = 0x0400; //0b00000100 00000000 //主模式//4. Configure Slave Address: the I2C device this I2C master would be addressing (ICSAR = 7BIT ADDRESS).ICSAR = (I2c_devaddr>>1); //它是7位地址,8位中的高7位是地址,所以右移1位//5. Configure the peripheral clock operation frequency (ICPSC). This value should be selected in such a way that the frequency is between 6.7 to 13.3 MHZ.ICPSC = 0x02; //可先搞慢点,看示波器研究//clkin/3这个预分频还要满足输出6.7 to 13.3 MHZ,说明clkin 在20.1 to 39.9MHz,它是sysclk3,sysclk3是系统参考时钟6分频来的,那么系统参考时钟最高才240MHz,不可能对。//6. Configure I2C master clock frequency:// Configure the low-time divider value (ICCLKL).// Configure the high-time divider value (ICCLKH).ICCLKL = 0x10;//set i2c clock high time divide down value, 0-FFFFhICCLKH = 0x10; // pclk/((0x10+5)+(0x10+5))}int Write_24c256(int addr,uchar * cp,int num) //在addr处,开始写num个字节,主程序确保不能跨页写{int i;//7. Make sure the interrupt status register (ICSTR) is cleared://· Read ICSTR and write it back (write 1 to clear) ICSTR = ICSTR//· Read ICIVR until it is zero.while (ICIVR) {ICSTR = ICSTR;};//8. Take I2C controller out of reset: enable I2C controller (set IRS bit = 1 in ICMDR).//bring i2c module out of reset//ICMDR |= 0x0020; // 0b00000000 00100000 ; //复位结束,开始工作了,上电这位是0//9. Wait until bus busy bit is cleared (BB = 0 in ICSTR).while (ICSTR & 0x1000); //00010000 00000000 //BBICCNT = num+2; // 设置一共发送数据的数目ICMDR = 0x6E20; // 01101110 00100000 断点继续工作、起始、停止、主、发、复位结束Delayus(1);while (!(ICSTR & 0x0010 )); // 00000000 00010000 ICXRDY 发送数据准备好中断标志位//write to transmit registerICDXR = ((addr>>8)& 0x00ff); // ROM数据地址HDelayus(1);while (!(ICSTR & 0x0010 )); // 00000000 00010000 ICXRDY 发送数据准备好中断标志位ICDXR = ((addr)& 0x00ff); // ROM数据地址Lfor (i=0;i<num;i++){Delayus(1);while (!(ICSTR & 0x0010 )); // 00000000 00010000 ICXRDY 发送数据准备好中断标志位ICDXR = *cp++; //}Delayus(10);ICMDR = 0; // 复位return i;}int Read_24c256(int addr,uchar * cp,int num) //在addr处,开始读num个字节{int i;//7. Make sure the interrupt status register (ICSTR) is cleared://· Read ICSTR and write it back (write 1 to clear) ICSTR = ICSTR//· Read ICIVR until it is zero.while (ICIVR) {ICSTR = ICSTR;};//8. Take I2C controller out of reset: enable I2C controller (set IRS bit = 1 in ICMDR).//bring i2c module out of reset//ICMDR |= 0x0020; // 0b00000000 00100000 ; //复位结束,开始工作了,上电这位是0//9. Wait until bus busy bit is cleared (BB = 0 in ICSTR).while (ICSTR & 0x1000); //00010000 00000000 //BBICCNT = 2; // 设置一共发送数据的数目ICMDR = 0x6620; // 01100110 00100000 断点继续工作、起始、主、发、复位结束Delayus(1);while (!(ICSTR & 0x0010 )); // 00000000 00010000 ICXRDY 发送数据准备好中断标志位//write to transmit registerICDXR = ((addr>>8)& 0x00ff); // ROM数据地址HDelayus(1);while (!(ICSTR & 0x0010 )); // 00000000 00010000 ICXRDY 发送数据准备好中断标志位ICDXR = ((addr)& 0x00ff); // ROM数据地址L//清中断标志while (ICIVR) {ICSTR = ICSTR;};ICMDR = 0x6420; // 01100100 00100000 断点继续工作、起始、主、收、复位结束//不知道能否产生接收起始、发送设备地址?Delayus(1);for (i=0;i<num;i++){if (i>=(num-1)) {ICMDR |= 0x8000; //设置不应答}while (!(ICSTR & 0x0008 )); // 00000000 00001000 ICRRDY 接受数据准备好中断标志位*cp++ = ICDRR; //接受数据Delayus(1);}ICMDR |= 0x0800; //停止位Delayus(2);ICMDR = 0; // 复位return i;}下一步研究I2C配置编解码芯片,妈了个巴子,就是向前!奋勇杀敌!
user3969552:
回复 user3969552:
《ADV7182学习笔记-1》
待续 努力向前