音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網
技術交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術 | 電源技術 | 測控之家 | EMC技術 | ARM技術 | EDA技術 | PCB技術 | 嵌入式系統(tǒng)
驅動編程 | 集成電路 | 器件替換 | 模擬技術 | 新手園地 | 單 片 機 | DSP技術 | MCU技術 | IC 設計 | IC 產業(yè) | CAN-bus/DeviceNe

硬件SPI的操作疑問.

作者:coke 欄目:單片機
硬件SPI的操作疑問.
有沒有哪位用過C8051F31X的MCU. 我用硬件SPI時候遇到一個問題就是收不到數(shù)據. 用數(shù)字示波器觀測到MISO的引腳有數(shù)據. 與MOSI的數(shù)據輸出是同步.
SPI工作在4線主模式查詢模式. 可以正確發(fā)送數(shù)據給對方.在MISO也能看到收到的規(guī)定數(shù)據.但SPI0DAT就是0X00.是哪里的問題.下面是簡化出來的SPI主模式測試程序.

#include"c8051F310.h"
#include<intrins.h>

typedef unsigned CHAR       BOOL;

// Data
typedef unsigned CHAR       BYTE;
typedef unsigned SHORT      WORD;
typedef unsigned LONG       DWORD;

// Unsigned numbers
typedef unsigned CHAR       UINT8;
typedef unsigned SHORT      UINT16;
typedef unsigned LONG       UINT32;

// Signed numbers
typedef signed CHAR         INT8;
typedef signed SHORT        INT16;
typedef signed LONG         INT32;

#define SPI_ENABLE()        (SPI0CN |= 0X01)

#define LOW 0
#define HIGH 1

#define CCxxx0_SRX          0x34     
                                      
#define CCxxx0_STX          0x35

// where freq is one of:
#define SCLK_6_MHZ      1
#define SCLK_4_MHZ      2
#define SCLK_3_MHZ      3
#define SCLK_2_4_MHZ    4
#define SCLK_2_MHZ      5
#define SCLK_1_5_MHZ    7
#define SCLK_1_2_MHZ    9
#define SCLK_1_MHZ      11

#define SPI_INIT(freq) \
do { \
        SPI0CFG = 0x40; \
        SPI0CN = 0x08; \
        SPI0CKR = freq; \
        SPI_ENABLE(); \
    } while (0)

#define DIS_watchdog()\
    do{PCA0MD &= ~0x40;\
    }while(0)

#define halSpiStrobe(strobe)\
      do {\       
        NSSMD0 = 0;\
     while (P_SO);\
        SPI0DAT = strobe;\
        while(SPIF);\
    SPIF=0;\
        NSSMD0 = 1;\
    } while (0)
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
                    I/O PORTS         
//-----------------------------------------------------------------*/
// PORT 0
sbit P_SCLK          =P0^0;        //OUTPUT
sbit P_SO            =P0^1;        //input
sbit P_UART_TD       =P0^4;        //OUTPUT    
sbit P_UART_RD       =P0^5;        //input    
sbit P_SI            =P0^6;        //OUTPUT
sbit P_NSSMD0        =P0^7;        //OUTPUT

// PORT 1
sbit P_SDA           =P1^0;        //input|OUTPUT
sbit P_SCL           =P1^1;        //OUTPUT
sbit P_SYSCLK         =P1^2;        //OUTPUT
sbit P_BUTTON_PUSH   =P1^3;        //input
sbit P_FSYN         =P1^4;        //OUTPUT
sbit P_BCLK         =P1^5;        //OUTPUT
sbit P_GDO2          =P1^6;        //nc
sbit P_GDO0          =P1^7;        //input

// PORT 2
sbit P_SPCLK         =P2^0;        //OUTPUT
sbit P_SPTR          =P2^1;        //OUTPUT|input
sbit P_SPEN         =P2^2;        //OUTPUT
sbit P_LED         =P2^3;        //OUTPUT
sbit P_DR            =P2^4;        //OUTPUT
sbit P_DT         =P2^5;        //input

void IO_PORT_INIT()
{
P0SKIP    = 0x0C;    //xtal1.xtal2
XBR0      = 0x0F;    //SYSCLK,SMBUS, SPI, UART be connected to I/O.
XBR1      = 0x40;

P0MDIN      &= 0XF9;
P0MDOUT      = 0XF1;

P1MDOUT   = 0x74;

P2MDOUT   = 0xdf;    //be used tested    
}
//======================================================================================================
void CLOCK_INIT(void)
{
UINT8 i;
OSCXCN    = 0x67;        // external CRYSTAL
for (i = 0; i < 200; i++);      // Wait 1ms for initialization
while ((OSCXCN & 0x80) == 0);    // Check the state of external OSCI
CLKSEL    = 0x01;        // SYSCLK <--External CRYSTAL
OSCICN    = 0x00;        // Internal OSCI stop
}              

BYTE spiGetTxStatus(void)
{
    UINT8 TEMP;
    NSSMD0 = LOW;    
    while (P_SO);
    SPI0DAT = 0x3d;    
    while(!SPIF);  //等待標志
    SPIF=0;   
2樓: >>參與討論
sclarkca
我也有同樣的問題
我用8051F040沒什么問題,但是8051F330就不行了,不知道為什么!


3樓: >>參與討論
sclarkca
怎么沒有高人指點呀?
樓主搞定了嗎?:)

4樓: >>參與討論
isoar
硬件SPI的用過,不過你的MCU太高級沒用過
 
5樓: >>參與討論
sclarkca
頂起來
樓主和各位大蝦指點一下了:)

6樓: >>參與討論
lrzxc
xhl的配套光盤上有ATMEL spi FLASH的例子
 
7樓: >>參與討論
coke
搞定
P0MDIN      &= 0XF9;

改成

P0MDIN      &= 0XF3;即可
不小心將P0.1設為模擬引腳.



參與討論
昵稱:
討論內容:
 
 
相關帖子
有那位知道2個串口的40pin單片機
請教51單片機顯示問題
定時中斷的返回,請教高手
做過x5045或寫5045的進來救個火……
頻率為300hz左右,應該用哪種測頻方法較準確
免費注冊為維庫電子開發(fā)網會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號