2015-11-03 57 views

回答

1

是的,它可以。事實上,如果你被迫以相同的方式使用它們,那麼提供兩個串行模塊就沒有多大意義。

因爲它說,在the datasheet

independent

注意,每個工作獨立於其他。此外,在SPI模式下,每個模塊:

slave

你可以看到,無論是主從模式的支持。

每個MSSP模塊都有自己的一組寄存器,用於根據需要配置每個模塊。

+0

謝謝,當使用模擬器件的AD7793時,我有一些問題,製造商提供的源文件有SPI_read和SPI_write函數。當我初始化SPI1_Init_Advanced以及SPI2時,main.c程序停止工作。只要有人被註釋掉,它就會重新開始工作(所有硬件連接正確) –

0

我也使用了AD7793,但是我推出了自己的SPI_READ和SPI_WRITE宏。這些宏在16位處理器上工作,也許在32位上(我還沒有嘗試過)。傳遞的第一個參數是SPI端口號(例如1或2)。他們工作在奴隸和主人模式。

例如SPI_WRITE(1,'H');或SPI_READ(2,char_to_send,char_to_receive_data);

#define _SPI_WRITE_final(_SPIBUF, _SPIRBF, _SPIROV, ch)    \ 
    _SPIROV = 0;              \ 
    while (_SPIRBF)             \ 
     __asm__ volatile ("mov %0, w0" : : "g"(_SPIBUF) : "cc", "w0"); \ 
    _SPIBUF = (uint8_t)(ch);           \ 
    __asm__ volatile ("nop");           \ 
    while (!_SPIRBF); 
    #define _SPI_WRITE_int(bus, ch)          \ 
    _SPI_WRITE_final(SPI##bus##BUF, SPI##bus##STATbits.SPIRBF,  \ 
    SPI##bus##STATbits.SPIROV, ch) 
    #define _SPI_WRITE(bus, ch)    do {_SPI_WRITE_int(bus, ch);} while(0) 

    #define _SPI_READ_final(_SPIBUF, _SPIRBF, _SPIROV, ch_out, ch_in) \ 
    _SPIROV = 0;              \ 
    while (_SPIRBF)             \ 
     __asm__ volatile ("mov %0, w0" : : "g"(_SPIBUF) : "cc", "w0"); \ 
    _SPIBUF = (uint8_t)(ch_out);          \ 
    __asm__ volatile ("nop");           \ 
    while (!_SPIRBF);             \ 
    ch_in = _SPIBUF; 
    #define _SPI_READ_int(bus, ch_out, ch_in)       \ 
    _SPI_READ_final(SPI##bus##BUF, SPI##bus##STATbits.SPIRBF,   \ 
    SPI##bus##STATbits.SPIROV, ch_out, ch_in) 
    #define _SPI_READ(bus, ch_out, ch_in) do {_SPI_READ_int(bus, ch_out, ch_in);} while(0) 
+0

太好了,謝謝!我現在正在使用一個8位PIC,但會很好的看​​看這段代碼。 –

相關問題