国产精品久久久久影院,成人午夜福利视频,国产精品久久久久高潮,国产精品 欧美 亚洲 制服,国产精品白浆无码流出

S3C6410 SPI全雙工讀寫流程分析

發(fā)布者:DreamySunset最新更新時(shí)間:2024-09-18 來(lái)源: cnblogs關(guān)鍵字:S3C6410  SPI  全雙工 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

S3C6410 SPI全雙工讀寫流程分析


一、SPI控制器datasheet


1詳細(xì)請(qǐng)參考:http://blog.csdn.net/hustyangju/article/details/20474659


2 SPI的所有寄存器都是映射到內(nèi)核空間的,采用基地址+偏移地址的方式訪問(wèn)


static volatile void  __iomem *spiregs;                            //global variable for mapping spiregister


spiregs = (volatile)ioremap(0x7F00B000,0x30);  //just request for the spi0


3 下文可能用到的偏移地址

#define S3C_CH_CFG                (0x00)     //SPI configuration  

#define S3C_CLK_CFG               (0x04)      //Clock configuration  

#define S3C_MODE_CFG                   (0x08)     //SPI FIFO control  

#define S3C_SLAVE_SEL            (0x0C)      //Slave selection  

#define S3C_SPI_INT_EN                   (0x10)      //SPI interrupt enable  

#define S3C_SPI_STATUS          (0x14)      //SPI status  

#define S3C_SPI_TX_DATA                (0x18)      //SPI TX data  

#define S3C_SPI_RX_DATA                (0x1C)      //SPI RX data  

#define S3C_PACKET_CNT                (0x20)      //count how many data master gets  

#define S3C_PENDING_CLR             (0x24)      //Pending clear  

#define S3C_SWAP_CFG           (0x28)      //SWAPconfig register  

#define S3C_FB_CLK                  (0x28)     //SWAP FB config register  

   

   

#define SPI_CH_SW_RST                   (1<<5)  

#define SPI_CH_MASTER                  (0<<4)  

#define SPI_CH_SLAVE              (1<<4)  

#define SPI_CH_RISING            (0<<3)  

#define SPI_CH_FALLING                   (1<<3)  

#define SPI_CH_FORMAT_A             (0<<2)  

#define SPI_CH_FORMAT_B             (1<<2)  

#define SPI_CH_RXCH_OFF              (0<<1)  

#define SPI_CH_RXCH_ON               (1<<1)  

#define SPI_CH_TXCH_OFF               (0<<0)  

#define SPI_CH_TXCH_ON                (1<<0)  

   

#define SPI_CLKSEL_PCLK                 (0<<9)  

#define SPI_CLKSEL_USBCLK   (1<<9)  

#define SPI_CLKSEL_ECLK                 (2<<9)  

#define SPI_ENCLK_DISABLE  (0<<8)  

#define SPI_ENCLK_ENABLE   (1<<8)  

   

#define SPI_MODE_CH_TSZ_BYTE (0<<29)  

#define SPI_MODE_CH_TSZ_HALFWORD       (1<<29)  

#define SPI_MODE_CH_TSZ_WORD       (2<<29)  

#define SPI_MODE_BUS_TSZ_BYTE        (0<<17)  

#define SPI_MODE_BUS_TSZ_HALFWORD     (1<<17)  

#define SPI_MODE_BUS_TSZ_WORD     (2<<17)  

#define SPI_MODE_RXDMA_OFF    (0<<2)  

#define SPI_MODE_RXDMA_ON     (1<<2)  

#define SPI_MODE_TXDMA_OFF    (0<<1)  

#define SPI_MODE_TXDMA_ON     (1<<1)  

#define SPI_MODE_SINGLE              (0<<0)  

#define SPI_MODE_4BURST             (1<<0)  

   

#define SPI_SLAVE_MAN                   (0<<1)  

#define SPI_SLAVE_AUTO                  (1<<1)  

#define SPI_SLAVE_SIG_ACT   (0<<0)  

#define SPI_SLAVE_SIG_INACT        (1<<0)  

   

#define SPI_INT_TRAILING_DIS      (0<<6)  

#define SPI_INT_TRAILING_EN       (1<<6)  

#define SPI_INT_RX_OVERRUN_DIS       (0<<5)  

#define SPI_INT_RX_OVERRUN_EN        (1<<5)  

#define SPI_INT_RX_UNDERRUN_DIS    (0<<4)  

#define SPI_INT_RX_UNDERRUN_EN     (1<<4)  

#define SPI_INT_TX_OVERRUN_DIS        (0<<3)  

#define SPI_INT_TX_OVERRUN_EN         (1<<3)  

#define SPI_INT_TX_UNDERRUN_DIS    (0<<2)  

#define SPI_INT_TX_UNDERRUN_EN     (1<<2)  

#define SPI_INT_RX_FIFORDY_DIS (0<<1)  

#define SPI_INT_RX_FIFORDY_EN  (1<<1)  

#define SPI_INT_TX_FIFORDY_DIS (0<<0)  

#define SPI_INT_TX_FIFORDY_EN  (1<<0)  

   

#define SPI_STUS_TX_DONE   (1<<21)  

#define SPI_STUS_TRAILCNT_ZERO        (1<<20)  

#define SPI_STUS_RX_OVERRUN_ERR   (1<<5)  

#define SPI_STUS_RX_UNDERRUN_ERR         (1<<4)  

#define SPI_STUS_TX_OVERRUN_ERR    (1<<3)  

#define SPI_STUS_TX_UNDERRUN_ERR          (1<<2)  

#define SPI_STUS_RX_FIFORDY       (1<<1)  

#define SPI_STUS_TX_FIFORDY       (1<<0)  

   

#define SPI_PACKET_CNT_DIS         (0<<16)  

#define SPI_PACKET_CNT_EN (1<<16)  


二、重點(diǎn)參數(shù)及初始化步驟


1 雙通道SPI管腳配置



2 傳輸模型配置

/*     Set transfer type (CPOL & CPHA set)    */

         spi_chcfg= SPI_CH_RISING | SPI_CH_FORMAT_A;

         spi_chcfg|= SPI_CH_MASTER;

         writel(spi_chcfg , spiregs + S3C_CH_CFG);

詳細(xì)請(qǐng)參考:http://blog.csdn.net/hustyangju/article/details/20474659

3 時(shí)鐘配置


使用PCLK,外部時(shí)鐘66M,100分屏:

 

/*     Set clock configuration register    

        *       SPIclockout = clock source / (2 * (prescaler +1))    

         *       PCLK=66Mhz, SPI clockout = clock source /(2 * (prescaler +1))      */

         spi_clkcfg= SPI_ENCLK_ENABLE;

         spi_clkcfg|= SPI_CLKSEL_PCLK;

         writel(spi_clkcfg , spiregs + S3C_CLK_CFG);

         spi_clkcfg= readl( spiregs + S3C_CLK_CFG);

 

         spi_clkcfg|= 49;       // the least spi speed =660Khz

         writel(spi_clkcfg , spiregs + S3C_CLK_CFG);

4 SPI 模塊設(shè)置


/*     Set SPI MODE configuration register    */

         spi_modecfg= SPI_MODE_CH_TSZ_BYTE| SPI_MODE_BUS_TSZ_BYTE;

         spi_modecfg|= SPI_MODE_TXDMA_OFF| SPI_MODE_SINGLE| SPI_MODE_RXDMA_OFF;

         spi_modecfg&= ~( 0x3f << 5);

         spi_modecfg|= ( 0x1 << 5);    // Tx FIFOtrigger level in INT mode

         spi_modecfg&= ~( 0x3f << 11);

         spi_modecfg|= ( 0x1 << 11);           // Rx FIFOtrigger level in INT mode

         spi_modecfg&= ~( 0x3ff << 19);     

         spi_modecfg|= ( 0x1 << 19);   // Counting ofTailing Bytes

 

         writel(spi_modecfg,spiregs + S3C_MODE_CFG);

 

設(shè)置在fifo和bus中的數(shù)據(jù)寬度為byte,關(guān)閉DMA訪問(wèn)fifo,并設(shè)置fifo中保存最大字節(jié)數(shù)為1,設(shè)置接收和發(fā)送fifo的觸發(fā)值為1byte。

5 中斷配置


/*     SetSPI INT_EN register   */

         writel(spi_inten,spiregs + S3C_SPI_INT_EN); //u32 spi_inten =0x00

         writel(0x1f,spiregs + S3C_PENDING_CLR);

6 設(shè)置最大接收數(shù)據(jù)包數(shù)量

SPI can control the number of packets to bereceived in master mode. If there is any number of packets to bereceived, justset the SFR (Packet_Count_reg). SPI stops generating SPICLK when the number ofpackets is thesame as what you set. It is mandatory to follow software orhardware reset before this function is reloaded.(Software reset can clear allregisters except special function registers, but hardware reset clears allregisters.)

[1] [2]
關(guān)鍵字:S3C6410  SPI  全雙工 引用地址:S3C6410 SPI全雙工讀寫流程分析

上一篇:ARM程序剖析--ARM程序結(jié)構(gòu),Image文件結(jié)構(gòu)等
下一篇:qt-embedded-linux-opensource-src-4.5.3移植到s3c6410

推薦閱讀最新更新時(shí)間:2025-06-28 05:33

S3C6410之uboot回爐再造(4)使能MMU
在上一篇中講完了lowlevel_init中對(duì)相應(yīng)模式的設(shè)置、在最后對(duì)MMU進(jìn)行了初始化。 那在這一篇就把使能MMU的過(guò)程描述了。   1、設(shè)置訪問(wèn)域 1 after_copy:            //這里怎么就after了、我們可還沒有copy呢                     //劇透一下,后面會(huì)補(bǔ)充copy相關(guān)的代碼,此處暫且跳過(guò) 2 #ifdef CONFIG_ENABLE_MMU    // 3 enable_mmu: 4 /* enable domain access */ 5 ldr r5, =0x0000ffff 6 mcr p15, 0, r5, c3, c0, 0
[單片機(jī)]
s3c6410的UART設(shè)備驅(qū)動(dòng)(1)
1、 這段話摘于《設(shè)備驅(qū)動(dòng)開發(fā)詳解》 在使用串口核心層這個(gè)通用串口tty驅(qū)動(dòng)層的接口后,一個(gè)串口驅(qū)動(dòng)要完成的主要工作: (1)、定義uart_driver、uart_ops、uart_port等結(jié)構(gòu)體的實(shí)例并在適當(dāng)?shù)牡胤礁鶕?jù)具體硬件和驅(qū)動(dòng)的情況初始化它們,當(dāng)然具體設(shè)備的驅(qū)動(dòng)可以將這些結(jié)構(gòu)體在新定義的xxx_uart_driver、xxx_uart_ops、xxx_uart_port之內(nèi)。 (2)、在模塊初始化是調(diào)用uart_register_driver和uart_add_port注冊(cè)UART驅(qū)動(dòng)并添加端口,在模塊卸載時(shí)調(diào)用uart_unregister_driver和uart_remove_one_port以注銷
[單片機(jī)]
<font color='red'>s3c6410</font>的UART設(shè)備驅(qū)動(dòng)(1)
深入理解ARM體系架構(gòu)(S3C6410)---認(rèn)識(shí)S3C6410
芯片架構(gòu)如圖 S3C64xx系列的應(yīng)用處理器芯片是三星主推的16/32 RISC 微處理器,三星目前推出了S3C6400和S3C6410,都是基于ARM11架構(gòu)的,而且硬件管腳兼容,應(yīng)該說(shuō)大致的功能基本相同,比較明顯的區(qū)別就是S3C6410帶有2D/3D硬件加速。 S3C6410說(shuō)明文檔下載地址: http://download.csdn.net/detail/muge0913/4144550 簡(jiǎn)單說(shuō)明如下: ARM Core:采用ARM1176JZF-S的核,包含16KB的指令數(shù)據(jù)Cache和16KB的指令數(shù)據(jù)TCM,ARM Core電壓為1.1V的時(shí)候,可以運(yùn)行到553MHz,在1.2V的情況下,可以運(yùn)
[單片機(jī)]
深入理解ARM體系架構(gòu)(<font color='red'>S3C6410</font>)---認(rèn)識(shí)<font color='red'>S3C6410</font>
深入理解ARM體系架構(gòu)(S3C6410)---ad轉(zhuǎn)化實(shí)例
本實(shí)例是把采集的ad數(shù)據(jù)轉(zhuǎn)化后顯示在lcd屏上,在這直接把自己調(diào)試好的源碼貼出來(lái) ad轉(zhuǎn)化器相關(guān)代碼: view plain copy print ? void adc_init() { char preScaler = 66500000/2500000 - 1; //PCLK=66M rADCCON = (1 14)|(preScaler 6)|(0 3)|(0 2);//通道AIN0 // rADCCON =0x44c1;//通道AIN0 } int read_adc() { rAD
[單片機(jī)]
ARM Linux (S3C6410架構(gòu)/2.6.35內(nèi)核)的內(nèi)存映射(四)
set_pte_ext()的作用是根據(jù)Linux給出的Linux版本頁(yè)表項(xiàng)來(lái)填充Arm硬件版本的頁(yè)表項(xiàng)。 對(duì)于s3c6410,set_pte_ext()函數(shù)由匯編宏armv6_set_pte_ext來(lái)實(shí)現(xiàn),定義在proc-macros.S文件中。 進(jìn)入函數(shù)時(shí),參數(shù)分別為: r0: pte的地址,這里的pte是二級(jí)頁(yè)表Linux版本中對(duì)應(yīng)的頁(yè)表項(xiàng)。 r1: Linux版二級(jí)頁(yè)表項(xiàng)的內(nèi)容。 r2: 0。 .macro armv6_set_pte_ext pfx str r1, , #-2048 @ linux version bic r3, r1, #0x000003fc bic r3, r3, #PTE_TYPE_
[單片機(jī)]
ESP32學(xué)習(xí)筆記(19)——SPI(主機(jī))接口使用
一、SPI簡(jiǎn)介 SPI(Serial Peripheral Interface) 協(xié)議是由摩托羅拉公司提出的通訊協(xié)議,即串行外圍設(shè)備接口,是一種高速全雙工的通信總線。它被廣泛地使用在 ADC、LCD 等設(shè)備與 MCU 間,要求通訊速率較高的場(chǎng)合。 芯片的管腳上只占用四根線。 MISO: 主器件數(shù)據(jù)輸入,從器件數(shù)據(jù)輸出。 MOSI:主器件數(shù)據(jù)輸出,從器件數(shù)據(jù)輸入。 SCK: 時(shí)鐘信號(hào),由主設(shè)備控制發(fā)出。 NSS(CS): 從設(shè)備選擇信號(hào),由主設(shè)備控制。當(dāng)NSS為低電平則選中從器件。 1.1 ESP32中SPI ESP32集成了4個(gè)SPI外設(shè)。 SPI0和SPI1在內(nèi)部用于訪問(wèn)ESP32所連接的閃存。兩個(gè)控制器共享相同的SP
[單片機(jī)]
STM32單片機(jī)SPI主從通信解析
今天講解“STM32F103 SPI主從通信”,原本計(jì)劃將這部分內(nèi)容定在后面(第二階段)來(lái)講解,滿足一位網(wǎng)友的問(wèn)題“關(guān)于兩塊MCU的SPI通訊”,所以今天特地提前講解了。 今天提供并講解的軟件工程,基于昨天的軟件工程“SPI讀寫Flash”修改而來(lái)。 測(cè)試原理及現(xiàn)象:主機(jī)間隔500ms發(fā)送10個(gè)字符(0-9),從機(jī)開啟SPI中斷接收數(shù)據(jù),接收滿10字節(jié)數(shù)據(jù),置標(biāo)志位gSPI_FlagOver有效,并變化LED,通過(guò)串口打印接收到的數(shù)據(jù)。 關(guān)于“STM32F103SPI通信從機(jī)部分”我把重要的幾點(diǎn)在下面分別講述,若不明白,請(qǐng)關(guān)注微信公眾號(hào)“EmbeddDeveloper”查閱或留言。 一、RCC時(shí)鐘配置 該函數(shù)位于在bs
[單片機(jī)]
STM32單片機(jī)<font color='red'>SPI</font>主從通信解析
MSP432-SPI主從通信
編寫程序?qū)崿F(xiàn)MSP432P401r單片機(jī)中eUSCI模塊之間的三線制SPI通信。其中,一個(gè)eUSCI_B0模塊作為主機(jī),另一個(gè)eUSCI_B2模塊作為主機(jī),主機(jī)從0X01開始發(fā)送遞增字節(jié),從機(jī)將接收到正確的字節(jié)時(shí),P1.0LED燈會(huì)閃爍。同時(shí),從機(jī)接收到的數(shù)據(jù)又會(huì)發(fā)回給主機(jī),主機(jī)接收到正確數(shù)據(jù),P2.2LE燈會(huì)閃爍:要求:三線,8位數(shù)據(jù),空閑位高電平,高位優(yōu)先: #include ti/devices/msp432p4xx/driverlib/driverlib.h /* Standard Includes */ #include stdint.h #include stdbool.h uint8_t RXData
[單片機(jī)]
小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved