DSP CSL 片上支援庫 EMIF

2021-06-22 13:17:18 字數 3601 閱讀 5759

dsp 的emif 介面,常用於dsp 擴充套件外部儲存器,可外接同步儲存器也可接非同步儲存器

本文主要講解了基於csl的emif 介面的配置。

要對emif進行配置,要按如下過程:

第一步:

開啟emif 控制器,對於tms320c6455 要執行一下**:

csl_finst(((csl_devregs*)csl_dev_regs)->percfg1, dev_percfg1_emifactl, \

enable);

該**是如何實現對emif 控制器的使能在上一文中已經詳細分析過,這裡不在重複。

第二步:

執行函式csl_emifainit(null)初始化emif csl 模組,**如下:

csl_status            status;

status = csl_emifainit(null);

第三步:

執行函式csl_emifaopen開啟emif 裝置,**如下:

csl_status status;

csl_emifaobj emifaobj;

csl_emifahandle hemifa;

status csl_emifainit(null);

hemifa = csl_emifaopen( &emifaobj, csl_emifa, null, &status);

第四步:

執行函式csl_emifahwsetup對emif 裝置進行配置,**如下:

csl_emifahandle hemifa;

csl_emifaasync asyncmem = csl_emifa_asynccfg_defaults;

csl_emifaasyncwait asyncwait = csl_emifa_asyncwait_defaults;

csl_emifamemtype value;

csl_emifahwsetup hwsetup;

csl_status status;

value.ssel = 0;

value.async = &asyncmem;

value.sync = null;

hwsetup.asyncwait = &asyncwait;

hwsetup.cecfg[0] = &value;

hwsetup.cecfg[1] = null;

hwsetup.cecfg[2] = null;

hwsetup.cecfg[3] = null;

//initialize and open the emifa csl

...//open emifa module

status = csl_emifahwsetup(hemifa, &hwsetup);

...

第五步:

配置完畢,在執行完以上幾步後,就可以通過emif 介面對儲存器進行操作了。

重點來了,如何知道怎麼配置emif 介面呢??也就是第五步中的hwsetup 變數如何來定義與賦值???

這就是本文所要將的重點。

首先要知道hwsetup 變數如何來定義的,看一下**:

typedef struct  csl_emifahwsetup;
該變數中包含了兩個指標結構體變數,*asyncwait 該變數用於配置非同步等待配置暫存器,

*cecfg[numchipenable] 該變數用於選擇所要配置的暫存器型別,同步還是非同步

其中numchipenable在csl 中已經定義為4,因為有四個空間ce2-ce5

再來看看*asyncwait 該變數是如何定義的,如下:

typedef struct  csl_emifaasyncwait;
該變數又有三個變數,第乙個asyncrdypol,表示非同步ready 訊號的極性,是個列舉型別。

第二個變數maxextwait,表示非同步儲存器的最大等待週期數

第三個變數turnarnd,表示翻轉週期數

列舉型別變數asyncrdypol定義,如下:

typedef enum  csl_emifaardypol;
接下來看看變數*cecfg[numchipenable]的定義,如下:

typedef struct  csl_emifamemtype;
其中ssel是用來選擇儲存器型別的,同步還是非同步

變數*async又是乙個結構體,是對非同步儲存器的一些引數的設定

變數*sync又是乙個結構體,是對同步儲存器的一些引數的設定

看看變數*async的定義:

typedef struct  csl_emifaasync;
每個引數的含義是什麼,可以檢視csl api 參考手冊

看看變數*sync的定義:

typedef struct  csl_emifasync;
每個引數的含義是什麼,可以檢視csl api 參考手冊

上面對hwsetup 變數進行了細緻深入的介紹,相信大家,可能有點雲裡霧裡的感覺,

下面我們來看看下面這幅圖:

相信大家看了這圖後,對該變數的結構和層次有了乙個比較清楚的了解。

一下**是將ce2配置為同步儲存器介面模式,**如下:

/*

* main.c

*/#include #include "define.h"

#include "csl_emifa.h"

#include "cslr_dev.h"

#define emifa_memtype_async 0

#define emifa_memtype_sync 1

extern int g_reversal;

/* handle for the emifa instance */

csl_emifahandle hemifa;

void main(void)

else

/* opening the emifa instance */

hemifa = csl_emifaopen(&emifaobj, csl_emifa, null, &status);

if ((status != csl_sok) || (hemifa == null))

else

/* setting up configuration parameter using hwsetup */

status = csl_emifahwsetup(hemifa, &hwsetup);

if (status != csl_sok)

else

printf("\tinfo: async read write \n");

while (1)

return;

}

FreeRTOS 支援時間片

所謂時間片就是同乙個優先順序任務下可以有多個任務,每個任務輪流的享有相同的cpu時間,享有cpu的時間我們叫做時間片。在rtos中,最小的時間單位是乙個tick,即 systick 的中斷週期。對於freertos,時間片只能是乙個tick。與其說freertos支援時間片,倒不如說他的時間片就是正...

STM32 片上Flash 操作

之前iap時候記錄過一些,今天對特定地方寫又加深了印象,寫與擦除都需要先unclock 1 讀取指定位址的半字 16位資料 2 faddr 讀位址 此位址必須為2的倍數 3 返回值 對應資料.4u16 stmflash readhalfword u32 faddr 5stmflash readhal...

CC254X片上flash讀寫解析

如果在開發中,希望個別資料掉電不丟失,那麼有幾種方法可以考慮,一種是通過i2c或者spi匯流排外接儲存,比如e2prom或flash,如果資料不大,第二種方便的方法就是操作片上flash了,要想操作片上flash,首先要搞清楚片上flash的儲存結構以及定址方式。例如cc2541f256這個晶元,我...