请大哥大姐们帮忙看下小弟的程序

[复制链接]
1848|0
 楼主| jiangbo86 发表于 2008-9-28 16:10 | 显示全部楼层 |阅读模式
以下是小弟写的一个LPC2114的SPI程序,<br />现在的情况是:S0SPDR(SPI0发送数据寄存器)无法写入,硬件仿真的时候S0SPDR复位值是0x7FF(手册上说复位值是0x0000)。<br /><br /><br /><br />/******************************************<br />&nbsp;文件名:main.c<br />&nbsp;功能:通过SPI向HC595写数据,驱动数码管显示;<br />&nbsp;创建日期:2008-9-22<br />2002&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;最后修改日期:2008-9-22<br />********************************************/<br />#include&nbsp;&nbsp;&nbsp;&nbsp;&quot;target.h&quot;<br />#include&nbsp;&ltLPC21xx.h&gt<br />#define&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPCCR&nbsp;&nbsp;&nbsp;&nbsp;0x08<br />#define&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPI&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00001500<br />#define&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPI_CS&nbsp;&nbsp;&nbsp;&nbsp;0x20000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*P0.29*/<br />#define&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPI_CTL&nbsp;&nbsp;&nbsp;&nbsp;0x30<br /><br />#define&nbsp;&nbsp;&nbsp;SPI_DATA&nbsp;&nbsp;0x00000040&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;P0.6&nbsp;&nbsp;*/<br />#define&nbsp;&nbsp;&nbsp;SPI_CLK&nbsp;&nbsp;&nbsp;0x00000010&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;P0.4&nbsp;&nbsp;*/<br />&nbsp;&nbsp;<br />#define&nbsp;&nbsp;&nbsp;SPI_IOCON&nbsp;&nbsp;&nbsp;&nbsp;(SPI_CS|SPI_DATA|SPI_CLK)<br />//*************************<br />void&nbsp;Delay(uint32&nbsp;dly);<br />//void&nbsp;TargetInit(void);<br />void&nbsp;GpioInit(void);<br />void&nbsp;SpiInit(void);<br />void&nbsp;SpiWrite(uint8&nbsp;data);<br />//*************************<br />int&nbsp;main(void)<br />{&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;data,tmp=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;uint8&nbsp;DISP_TAB[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x88,0x83,0xC6,0xA1,0x86,0x8E};<br />&nbsp;&nbsp;&nbsp;&nbsp;GpioInit();<br />&nbsp;&nbsp;&nbsp;&nbsp;SpiInit();<br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(data=0&nbsp;;data&lt16&nbsp;;data++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;IOCLR0&nbsp;=&nbsp;0x20000000;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//使能激活<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//S0SPDR&nbsp;=&nbsp;DISP_TAB[data];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SpiWrite(DISP_TAB[data]);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//发送<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;((S0SPSR&0x80)!=1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//等待发送结束<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Delay(10);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IOSET0&nbsp;=&nbsp;IOSET0|SPI_CS;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//使能无效<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delay(1000);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//延时&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />//*************************************<br />void&nbsp;Delay(uint32&nbsp;dly)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uint32&nbsp;&nbsp;&nbsp;&nbsp;i,j;<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i=0&nbsp;;i&ltdly&nbsp;;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(j=0&nbsp;;j&lt250&nbsp;;j++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{;}<br />}<br />//*************************************<br />/*void&nbsp;TargetInit(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;//禁止中断<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//PLL设置<br />&nbsp;&nbsp;&nbsp;&nbsp;PLLCON&nbsp;=&nbsp;0x03;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//使能PLL<br />&nbsp;&nbsp;&nbsp;&nbsp;PLLCFG&nbsp;=&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;PLLFEED&nbsp;=&nbsp;0xAA;<br />&nbsp;&nbsp;&nbsp;&nbsp;PLLFEED&nbsp;=&nbsp;0x55;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//PLL馈送&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}*/<br />//*************************************<br />void&nbsp;GpioInit(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;PINSEL0&nbsp;=&nbsp;SPI;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//设置管脚SPI0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IODIR0&nbsp;=&nbsp;SPI_CS;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//设置P0.29为输出<br />}<br />//*************************************<br />void&nbsp;SpiInit(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;test;<br />&nbsp;&nbsp;&nbsp;&nbsp;IOSET0&nbsp;=&nbsp;SPI_CS;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//P0.29置高电平<br />&nbsp;&nbsp;&nbsp;&nbsp;//S0SPCCR&nbsp;=&nbsp;SPCCR;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//设置SCK频率<br />&nbsp;&nbsp;&nbsp;&nbsp;S0SPCR&nbsp;=&nbsp;SPI_CTL;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//禁止SPI中断,位7在先,主模式,SCK低有效,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//SCK第一个时钟沿有效,传输从CS信号激活开始<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//CS信号无效时结束。<br />&nbsp;&nbsp;&nbsp;&nbsp;test&nbsp;=&nbsp;S0SPSR;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//第一次仿问SPSR,使能仿问SPDR<br />}<br />//*************************************<br />void&nbsp;SpiWrite(uint8&nbsp;data)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;S0SPDR&nbsp;=&nbsp;data;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//写数据,启动发送&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />&nbsp;/*************************************************<br /><br />&nbsp;&nbsp;创建日期:2008-9-22<br />&nbsp;&nbsp;最后修改日期:2008-9-22<br />&nbsp;&nbsp;*************************************************<br />&nbsp;&nbsp;目标板配置文件。<br /><br />&nbsp;**************************************************/<br />&nbsp;#ifndef&nbsp;__config_h<br />&nbsp;#define&nbsp;__config_h<br />&nbsp;#ifndef&nbsp;TRUE<br />&nbsp;#define&nbsp;TRUE&nbsp;&nbsp;1<br />&nbsp;#endif<br /><br />&nbsp;#ifndef&nbsp;FALSE<br />&nbsp;#define&nbsp;FALSE&nbsp;0<br />&nbsp;#endif<br /><br />&nbsp;typedef&nbsp;unsigned&nbsp;char&nbsp;&nbsp;uint8;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//无符号8位整型变量&nbsp;<br />&nbsp;typedef&nbsp;signed&nbsp;&nbsp;&nbsp;char&nbsp;&nbsp;int8;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//有符号8位整型变量<br />&nbsp;typedef&nbsp;unsigned&nbsp;short&nbsp;uint16;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//无符号16位整型变量<br />&nbsp;typedef&nbsp;signed&nbsp;&nbsp;&nbsp;short&nbsp;int16;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//有符号16位整型变量<br />&nbsp;typedef&nbsp;unsigned&nbsp;int&nbsp;&nbsp;&nbsp;uint32;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//无符号32位整型变量<br />&nbsp;typedef&nbsp;signed&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;int32;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//有符号32位整型变量<br />&nbsp;typedef&nbsp;float&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fp32;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//单精度浮点数(32位长度)<br />&nbsp;typedef&nbsp;double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fp64;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//双精度浮点数(64位长度)<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;//*************************************************<br />&nbsp;#define&nbsp;M&nbsp;&nbsp;&nbsp;&nbsp;4<br />&nbsp;#define&nbsp;p&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;#define&nbsp;FOSC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;11059200&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//晶振频率,11M~25M<br />&nbsp;#define&nbsp;FCCLK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FOSC*4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//系统频率,(1~32整数倍Fosc)<br />&nbsp;#define&nbsp;FCCO&nbsp;&nbsp;&nbsp;&nbsp;(FCCLK&nbsp;*&nbsp;4)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//CCO频率,为Fcclk的2、4、8、16倍<br />&nbsp;#define&nbsp;FPCLK&nbsp;&nbsp;&nbsp;&nbsp;(FCCLK&nbsp;/&nbsp;4)&nbsp;*&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//VPB时钟频率,为(Fcclk&nbsp;/&nbsp;4)的1、2、4倍<br />&nbsp;&nbsp;//***************************************************<br />&nbsp;#endif<br /><br /><br /><br /><br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

6

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部