智能车制作

标题: MC9S12DG128系列例程--SPI [打印本页]

作者: chiusir    时间: 2008-11-29 06:48
标题: MC9S12DG128系列例程--SPI
<>/**************************************************************************************<BR>龙丘MC9S12(DG128)多功能开发板 <BR>Designed by Chiu Sir<BR>E-mail:chiusir@163.com<BR>软件版本:V1.1<BR>最后更新:2008年11月28日<BR>相关信息参考下列地址:<BR>博客:&nbsp; <A target=_blank href="http://longqiu.21ic.org/">http://longqiu.21ic.org</A><BR>淘宝店:<A target=_blank href="http://shop36265907.taobao.com/">http://shop36265907.taobao.com</A><BR>------------------------------------<BR>Code Warrior 4.6<BR>Target : MC9S12DG128B<BR>Crystal: 16.000Mhz<BR>busclock: 8.000MHz<BR>pllclock:16.000MHz</P><P>本程序主要包括以下功能:<BR>1.设置锁相环和总线频率;<BR>2.初始化SPI为400kbps;<BR>3.SPI读函数和写函数。<BR>*****************************************************************************************/<BR>#include &lt;hidef.h&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* common defines and macros */<BR>#include &lt;mc9s12dg128.h&gt;&nbsp;&nbsp;&nbsp;&nbsp; /* derivative information */<BR>#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"</P><P>//----------------------------------------------------- <BR>//延时1毫秒 <BR>void Dly_ms(int ms)<BR>{<BR>&nbsp;&nbsp; int ii,jj;<BR>&nbsp;&nbsp; if (ms&lt;1) ms=1;<BR>&nbsp;&nbsp; for(ii=0;ii&lt;ms;ii++)<BR>&nbsp;&nbsp;&nbsp;&nbsp; for(jj=0;jj&lt;2670;jj++);&nbsp;&nbsp;&nbsp; //busclk:16MHz--1ms<BR>}<BR>//-----------------------------------------------------&nbsp;&nbsp; <BR>//SPI写一个字节<BR>void SPI_Write_Byte(U8 val)<BR>{<BR>&nbsp;SPI0DR = val;<BR>&nbsp;while(!(SPI0SR_SPIF));<BR>&nbsp;return;<BR>}<BR>//----------------------------------------------------- <BR>//SPI读一个字节 <BR>U8 SPI_Read_Byte(void)<BR>{ &nbsp;<BR>&nbsp;while(!(SPI0SR_SPIF));<BR>&nbsp;return SPI0DR;<BR>}<BR>//----------------------------------------------------- <BR>//SPI初始化,速率400kbps <BR>void SPI_Init(void) <BR>{<BR>&nbsp; DDRT = 0xff;<BR>&nbsp; MODRR&nbsp;&nbsp; = 0x00;&nbsp; <BR>&nbsp; SPI0CR2 = 0x10;<BR>&nbsp; SPI0CR1 = 0x5e;&nbsp;&nbsp; <BR>&nbsp; SPI0BR&nbsp; = 0x42; //BR=busclk/((SPPR + 1)· 2^(SPR + 1))=16000/(5*8)=400k&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>}<BR>//----------------------------------------------------- <BR>//总线频率为16M <BR>void setbusclock(void)<BR>{&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; CLKSEL=0X00;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //disengage PLL to system<BR>&nbsp;&nbsp;&nbsp; PLLCTL_PLLON=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //turn on PLL<BR>&nbsp;&nbsp;&nbsp; SYNR=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp; REFDV=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //pllclock=2*osc*(1+SYNR)/(1+REFDV)=32MHz;<BR>&nbsp;&nbsp;&nbsp; _asm(nop);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //If PLL is selected (PLLSEL=1), Bus Clock = PLLCLK / 2=16M&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; while(!(CRGFLG_LOCK==1)) <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _asm(nop);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //when pll is steady ,then use it;<BR>&nbsp;&nbsp;&nbsp; CLKSEL_PLLSEL =1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //engage PLL to system; <BR>}<BR>//====================================================== <BR>void main(void) {<BR>&nbsp; unsigned char spich=0;<BR>&nbsp; EnableInterrupts;<BR>&nbsp; <BR>&nbsp; setbusclock();&nbsp; <BR>&nbsp; SPI_Init();<BR>&nbsp; <BR>&nbsp; for(;;)<BR>&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dly_ms(200);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SPI_Write_Byte(0xff);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; spich=SPI_Read_Byte();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在这里添加你的代码!这是我SD卡操作的原函数,绝对好用!<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */&nbsp;&nbsp;<BR>&nbsp; }&nbsp;&nbsp; <BR>}<BR>需要完整工程请单击:<A target=_blank href="http://blog.21ic.com/UploadFiles/2008-11/282233989683.rar">demoSPI.rar</A></P>
作者: chiusir    时间: 2008-12-2 03:26
标题: Re:MC9S12DG128系列例程--SPI
<><FONT face=宋体 color=#0000ff size=5>看帖不回是不道德的!<IMG src="http://www.znczz.com/images/Emotions/11.gif"></FONT></P>
作者: aflyeagle    时间: 2008-12-5 16:12
标题: Re:MC9S12DG128系列例程--SPI
很有用啊,谢谢啊
作者: yup775    时间: 2009-3-12 09:50
不错不错!
作者: huahai    时间: 2009-4-10 20:10
谢谢啊
作者: 李铁川    时间: 2009-4-12 19:30
楼主是个厚道人
作者: yangyong1011    时间: 2009-4-17 17:55
很好的程序。谢谢。
作者: 13673123373    时间: 2009-4-18 12:58
看帖不回是不道德的!
作者: mamin506    时间: 2009-4-30 09:35
谢谢龙丘~原来我栽在MOSRR上了。。。狂晕。。。
作者: songfangfang    时间: 2009-4-30 13:25
SPI搞了几天,晕死,数据一直读的不顺利~~~,有用。拿去看看~~~~
作者: dtszcr    时间: 2009-5-24 18:37
学一学
作者: ufk119    时间: 2009-6-4 11:14
正在学习这个东东~hoho,
作者: lizzy115    时间: 2009-6-4 15:32
很好的
作者: 3215762    时间: 2009-6-8 20:14
急需啊,谢谢了
作者: zhangq062336    时间: 2009-6-9 23:40
楼主正不错,我正在做这块儿,SPI时钟无法输出不知道什么问题。
作者: chiusir    时间: 2009-6-10 00:07
没有初始化吧
作者: vallis    时间: 2009-8-24 21:13
我在做SD卡的时候,能够正确的初始化,和读取里面的数据,但是不能写数据,在执行写函数以后,再也不能初始化和读取数据了,只有把sd卡的引脚全部断开(包括电源)才能重新初始化和读取,但是还是不能写数据。我的写函数如下:
unsigned char SD_WriteData(byte *Write_Buff,dword length)
{
   static byte r1;
   dword i;
   r1=SD_SendCMD(25,0x00,0x00); //发多块写入指令
   if(r1!=0x00)
   {
      putstr("CMD25 faild\r\n");
      return 0;
   }
   SD_CS=0;
   //等待SD卡准备好
   SPI_WriteByte(0xff);
   SPI_WriteByte(0xff);
   
   SPI_WriteByte(0xfc);
   for(i=0;i<512;i++)
   {
      SPI_WriteByte(*Write_Buff);
      Write_Buff++;
   }
  
   SPI_WriteByte(0xff);   
   SPI_WriteByte(0xff);   
      
   r1=SPI_ReadByte();

   if((r1&0x0f)!=0x05)
   {
       putstr("write data error\r\n");
       return 0 ;        //数据如果数据出错,死机。。。。。。
   }

   SD_CS=1;
   putstr("write data seccussful\r\n");
   return 1;
}
作者: nihaochenzhou    时间: 2009-8-25 09:35
谢谢
作者: qijitao    时间: 2009-10-27 20:30
谢谢啊  大侠
作者: qijitao    时间: 2009-11-10 19:09
多谢 多谢
作者: justing88    时间: 2009-11-10 22:35
谢谢
作者: linglong    时间: 2009-11-12 09:40
很好的程序!
作者: mingqing43    时间: 2009-12-8 14:28
不错
作者: uestcct    时间: 2009-12-8 16:49
我悲剧了,看来还得先学学单片机C编程
作者: chengyongji    时间: 2009-12-8 19:25
学习
作者: bayan    时间: 2009-12-13 11:43
道德。
作者: yuan    时间: 2009-12-13 20:05
huiyixia
作者: 超群天晴    时间: 2009-12-21 21:32
回复 1# chiusir


   哈哈  看看再说
作者: qianruixinmeng    时间: 2010-1-2 18:49
好东西!
作者: 小雨1111    时间: 2010-1-6 12:03
很好的
作者: 山孩子    时间: 2010-1-12 13:13
谢谢
作者: jianghua302    时间: 2010-1-15 21:11
不错
作者: jianghua302    时间: 2010-1-15 21:11
不错
作者: 流_云    时间: 2010-1-18 13:12
太感谢了,正发愁呢
作者: 姚先生    时间: 2010-3-3 12:32
看帖不回是不道德的!
作者: hanjianghappy    时间: 2010-3-4 17:20
谢谢!!!
作者: zjuET    时间: 2010-3-4 18:36
嗯ding
作者: silence_lut    时间: 2010-3-8 18:52
谢谢
作者: 极意旋风    时间: 2010-3-11 20:28
多谢!!!
作者: wtisheng    时间: 2010-3-11 23:47
拿来看看啊
作者: huangyr    时间: 2010-3-12 15:58
学习了哦
作者: freefly    时间: 2010-3-28 00:19
hui!
作者: hezhendong    时间: 2010-4-2 23:16

作者: jht    时间: 2010-4-8 21:35
困惑已久啊
作者: hxlightblue    时间: 2010-4-20 12:49
谢谢
作者: clgt2001    时间: 2010-4-22 21:27
谢谢
作者: feiyangxiaomi    时间: 2010-4-23 08:10
谢了,楼主人好!
作者: gjs1988    时间: 2010-4-23 09:53
很好啊
作者: 那边的天空    时间: 2010-5-5 15:04
  好东西
作者: jiang1101    时间: 2010-7-17 20:03
谢谢楼主
作者: yujun1126    时间: 2010-9-22 17:30
非常感谢 很好
作者: 唐祖国    时间: 2010-9-23 13:16
谢谢!
作者: xiaolezizhl    时间: 2010-10-6 17:46
谢谢了
作者: 忘记吧    时间: 2010-10-19 21:09
八错八错
作者: shdhll    时间: 2010-11-1 11:45
看帖回了猜道德
作者: zhangjiarui    时间: 2010-11-26 09:28
我要用无线发射,可以直接填在里面吗?
作者: liamqy    时间: 2010-12-3 11:22
顶一下
作者: ngngabc    时间: 2011-2-26 11:07

作者: 云飞扬    时间: 2011-3-4 16:33
顶一个!
作者: mengyaowuxiang    时间: 2011-4-2 16:41
好东西,谢谢
作者: 云飞扬    时间: 2011-4-5 17:02
谢谢龙丘,收下了!
作者: LEUNG    时间: 2011-4-9 14:46

作者: qaabq    时间: 2011-8-21 22:36

作者: he_lin_1990    时间: 2012-1-7 14:40
我的不知道怎么用不了啊?
作者: OPQ-XYQ    时间: 2012-4-4 08:42
支持,
作者: OPQ-XYQ    时间: 2012-4-4 09:16
其中有真意
作者: 池中鱼    时间: 2012-10-28 15:26
乱码???
作者: mengmeng721521    时间: 2012-11-13 15:40
支持!谢谢楼主!




欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2