常驻嘉宾
- 积分
- 4766
- 威望
- 2070
- 贡献
- 2500
- 兑换币
- 13
- 注册时间
- 2010-9-11
- 在线时间
- 98 小时
|
大家好,其实SPI也就才几寄存器,但是我写了不知道怎么来检测它是否好使,程序写好了,有主程序里一直调用SPI_Init(); 但是CLK引脚上一直不出波形,不知道是为什么,请大家看看,也许可以解决我的这个困惑。- #include <hidef.h> /* common defines and macros */
- #include <mc9s12dg128.h> /* derivative information */
- #pragma LINK_INFO DERIVATIVE "mc9s12dg128b"
- //-----------------------------------------------------
- //延时1毫秒
- void Dly_ms(int ms)
- {
- int ii,jj;
- if (ms<1) ms=1;
- for(ii=ms;ii>0;ii--)
- for(jj=0;jj<2670;jj++); //busclk:16MHz--1ms
- }
- //-----------------------------------------------------
- //SPI写一个字节
- void SPI_Write_Byte(unsigned char val)
- {
- SPI0DR = val;
- while(!(SPI0SR_SPIF));
- return;
- }
- //-----------------------------------------------------
- //SPI读一个字节
- unsigned char SPI_Read_Byte(void)
- {
- while(!(SPI0SR_SPIF));
- return SPI0DR;
- }
- //-----------------------------------------------------
- //SPI初始化,速率400kbps
- void SPI_Init(void)
- {
- DDRT = 0xff;
- MODRR = 0x00;
- SPI0CR2 = 0x10;
- SPI0CR1 = 0x4e;
- SPI0BR = 0x42; //BR=busclk/((SPPR + 1)· 2^(SPR + 1))=16000/(5*8)=400k
- }
- //-----------------------------------------------------
- //总线频率为16M
- void setbusclock(void)
- {
- CLKSEL=0X00; //disengage PLL to system
- PLLCTL_PLLON=1; //turn on PLL
- SYNR=1;
- REFDV=1; //pllclock=2*osc*(1+SYNR)/(1+REFDV)=32MHz;
- _asm(nop); //If PLL is selected (PLLSEL=1), Bus Clock = PLLCLK / 2=16M
- while(!(CRGFLG_LOCK==1))
- _asm(nop); //when pll is steady ,then use it;
- CLKSEL_PLLSEL =1; //engage PLL to system;
- }
- //======================================================
- void main(void) {
- unsigned char spich=0;
- EnableInterrupts;
-
- setbusclock();
- for(;;)
- {
- SPI_Init();
-
- }
复制代码 |
|