作者easypro ()
看板ASM
标题Re: [问题] 串列输入控制显示器 (已追加IC情报)
时间Fri Sep 18 23:02:42 2009
※ 引述《odahawk (羊皮狼)》之铭言:
: ※ 引述《beminaru》之铭言:
: 根据你给的IC资料,可以看得出来是半工的SPI通讯。
: 一开始看你程式觉得奇怪的是 da_data(int a) 段
: SPI通讯特点是藉由Clock高至低或低至高的时候拿取资料。
: 注意图2-2-2,你的IC则是Clock需至少维持tDS时间的Low与tDH时间的High
: 这段时间内的资料才视为有效。
: 所以程式应该改成:
: void da_data(int a) // set input data (DA)
: {
: for (i = 1; i <= 8; i++) // data length = 8 bits
: {
: cpb = 0; delay(0); // 这里先拉为Low
: if(a & 0x01) //这边送出有效资料
: da = 1;
: else
: da = 0;
: a >>= 1;
: cpb = 1; delay(0); // 拉为High 结束这一 bit
: }
: }
: 不知道你的MCU运作时间是多长,资料上要求是300ns
: 所以delay(0)的部分可有可无。
: 可以的话先用逻辑分析仪试验这段是否能够正常按照SPI模式传讯。
借用上方程式说明
原PO的CS脚控制程式本身也是错的
在第一页里面的波形图中
你要输入资料前要先将 CS PIN 拉成 low 状态,且要在进入data clock前要先有最少
1us的时间延迟,而且不是delay後就拉回high状态,这样状态是无法输入的。
所以在进入da_data前,先将CSB=0; delay_us(1);(keil c不熟 delay 1us的语法
可能会有错),等到资料都输入完後再将 delay_us(1); CSB=1;即可完成一次的资料
输入。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.134.145.35