




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、TMS320F28335開發過程中常見問題總結1.SPI驅動TLE7241E出現返回值不對的問題。主要是由于時序的不對,導致TLE7241E輸入采樣時數據還沒有建立,所以TLE7241E收到的命令不正確,所以返回值不正確。2.SPI驅動EEPROM時,如果用金屬物觸到clock pin時,能正確運行,否則不能正確運行。出現次問題也是由于時序的問題,金屬物觸到clock導致clock出現微小幅度的偏移,導致正好和eeprom的時序對上,而不用金屬物觸碰時時序不正常,當使dsp MOSIpin數據發送提前半個周期后,eeprom工作正常。3.示波器有時會導致顯示的波形被消尖,所以用示波器測量時周期
2、不能太大。TMS320F28335筆記-I2C1.響應和非響應的區別是什么? 關于i2c的響應問題:對于每一個接收設備(從設備,slaver),當它被尋址后,都要求在接收到每一個字節后產生一個響應。因此,the master device 必須產生一個額外的時鐘脈沖(第九個脈沖)用以和這個響應位相關聯。 在這個脈沖期間,發出響應的從設備必須將SDA拉低并在時鐘脈沖的高電平期間保持住。這表示該設備給出了一個ACK。如果它不拉低SDA線,就表示不響應(NACK)。另外,在從機(發送方)發送完最后一個字節后主設備(接收方)必須產生一個不響應位,用以通知從機(發送方)不要再發送信息了,這樣從機就知道該
3、將SDA釋放了,而后,主機發出一個停止位給slaver。總結下,i2c通訊中,SDA 和 SCL 都是有主機控制的,從設備只是能夠將SDA線拉低而已。對于SCL線,從機是沒有任何能力去控制的。從機只能被動跟隨SCL 再說的清楚些:主機發送數據到從機的狀態下:主機控制SCL信號線和SDA信號線,從機只是在SCL線為高的時候去被動讀取SDA線。主機讀取從機的數據:主機來發出時鐘信號,從機只是保證在時鐘信號為高電平的時候的SDA的狀態而已。 SDA和SCL已經通過上拉電阻被上拉,master可以控制(拉低或者釋放)這兩條線,而slaver只能控制SDA線。當master發送數據時,master會適時
4、地將SDA和SCL拉低或釋放(拉高)。確切的時序應該是這樣的:當mater要發送一個start時,mater會將SDA拉低,這就可以了,因為此時的SCL一定是High。好了,一個start就這樣發出去了。而slaver也會發現這個start信號的發生,slaver便會準備好接收接下來的數據了。緊接著,master要發送一個Byte的數據了,一位一位的發出這8個bits。這時master會先將SCL拉低,然后在SCL為低的狀態下將一個bit準備好放到SDA上(比如要發送一個 0,master就會通過拉低SDA來放好這個0),然后master會把SCL拉高(釋放),此時slaver會立刻檢測到SC
5、L的變化,由此聰明的slaver便知道master已經將要發送的那個bit準備好了,slaver便會在這個SCL的高電平期間盡快(maser不會等你很久的哦)去讀取一下SDA,嗯讀到了一個0,slaver就把這個0放到自己的移位寄存器中待后續處理。master會在一個設定好的時間后把SCL再次拉低,然后在SCL為低電平期間把下一個bit放到SDA上,然后再把SCL拉高,然后slaver在SCL的高電平期間再去讀SDA。如此反復8次,一個Byte的傳輸便告結束。當這8個bit發完后,SCL是處于低電平的(被master拉低的),SDA是出于高電平的(master已經釋放了SDA)。 當一個字節發
6、送完畢后,master會釋放SDA(拉高)并拉低SCL,此時slaver如果打算發出一個ACK的話,它必須在這個SCL被master拉低的短暫時間內去主動將SDA拉低并保持住 (此前我們說過,SDA此時已經被master釋放,所以slaver才有機會去拉低這個SDA)。master會在一個確定的時間后再次將SCL拉高,并在拉高的期間去讀取SDA線的狀態,如果讀到低電平,則認為收到了來自slaver的響應(ACK),否則認為slaver沒有響應(NACK)剛才發送的那一個Byte。這個過程就是我們說的i2c通訊中的第9個時鐘周期。當master讀完這個ACK / NACK 后,會再次將SCL拉低
7、,用以通知slaver:第9個時鐘周期已經結束,你現在可以釋放SDA了。而此時master也可以向SDA上準備下一個Byte的第一個bit。繼而重復上述過程。或者,master也許想在接下來發送一個stop過去,那么master會在這個SCL為低的時間內將SDA拉低,而后再將SCL拉高,在SCL為高的期間再將SDA釋放 (拉高) 。這樣,一個STOP位就產生了。你會發現此后的SDA和SCL都是高,這就是是所謂的總線空閑了!一句話:SCL是單向的,由master控制。而SDA是雙向的,master可以控制,slaver也可以控制。 2.示波器探頭會對波形產生影響,導致波形延時,使用是請注意。TM
8、S320F28335學習筆記-ADC控制器1. ADC的工作模式有哪些? 同時采樣模式和順序采樣模式。2. ADCINT與SEQ1INT、SEQ2INT中斷有什么區別 SEQ1INT和SEQ2INT對應序列器SEQ1和SEQ2的中斷,ADCINT是為了向前兼容F281x系列的ADC中斷,可以由SEQ1或SEQ2觸發產生。在ADCINT中斷服務程序里,需要軟件干預去根據對應標志位確定到底是哪個序列產生了中斷,而SEQINT1&2是不需要的。TMS320F28335筆記-啟動過程1. DSP reset后運行的起始地址是多少? 0x3FFFC02.仿真器燒寫程序的步驟是? 根據cmd文件把
9、程序燒到指定位置,然后執行。3.DSP的Flash啟動過程是什么? 首先硬件配置GPIO8487上拉為1,即處于Flash啟動過程。當DSP復位后,會從復位向量0x3FFFC0處取得復位向量,并跳轉到InitBoot處開始執行,InitBoot會讀GPIO8487的值發現全為1判斷為Flash啟動方式。然后會跳到0x33FFF6處執行。在CCS5.2工程的cmd文件中有如下代碼:MEMORYPAGE 0 : BEGIN : origin = 0x33FFF6, length = 0x000002 /*
10、 Boot to M0 will go here */.SECTIONS.codestart : > BEGIN PAGE = 0.即表示把codestart段放到0x33FFF6位置處,文件“DSP2833x_CodeStartBranch.asm”中有codestart段的定義,實際上codestart段只是包含了一個跳轉指
11、令,是程序跳轉到_c_int00處,_c_int00在boot.asm in RTS library中有定義,_c_int00的代碼最終會調用c的main函數,之后就是main函數的執行。4.F28335如何燒寫代碼到flash中并運行?首先使用添加C:ticontrolSUITEdevice_supportf2833xv133DSP2833x_commoncmdF28335.cmd。此文件即為配置代碼到flash中的TI官方配置文件。然后參考C:ticontrolSUITEdevice_supportf2833xv133DSP2833x_examples_ccsv4flash_f28335。
12、添加以下代碼:MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);將一些在內存中運行的代碼從flash復制到內存中,然后程序才能正常運行。5.寫好的代碼再ram中能正常運行但是燒寫到flash中后,函數DSP28x_usDelay()不能正常運行為什么? 因為在DSP2833x_usDelay.asm中有.sect "ramfuncs",即把該函數定義在段"ramfuncs"中, 而此段需要在內存中運行,故需要使用函數MemCopy(&Ramfu
13、ncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);將ramfuncs段復制到內存中然后運行。只算以這樣設計是因為函數DSP28x_usDelay()精準運行對運行速度有要求故必須放在段"ramfuncs"中。參考:6.cmd中以下代碼如何解釋? ramfuncs : LOAD = FLASHD,
14、 RUN = RAML0, LOAD_START(_RamfuncsLoadStart), LOAD_END(_RamfuncsLoadEnd),
15、160; RUN_START(_RamfuncsRunStart), PAGE = 0第1行表示該段的裝載在PAGA0的FLASHD中第2行表示該段的運行地址在PAGE0的RAML0中LOAD_ START(_RamfuncsLoadStart)令編譯器創建了一個變量RamfuncsLoadStart,該變量指向段ramfu
16、ncs的裝載地址的首地址(LOAD_ START為編譯偽指令,請見CCS的幫助文檔);LOAD_ START(_RamfuncsLoadEnd)令編譯器創建了一個變量RamfuncsLoadEnd,該變量指向段ramfuncs的裝載地址的末地址(LOAD_ END為編譯偽指令,請見CCS的幫助文檔);LOAD_ START(_RamfuncsRunStart)令編譯器創建了一個變量RamfuncsRunStart,該變量指向段ramfuncs的運行地址的首地址(LOAD_ START為編譯偽指令,請見CCS的幫助文檔); 從第1和2行可以看出,段ramfuncs中的函數DSP28x_usDel
17、ay()的裝載地址和運行地址是不同的,本程序中裝載在Flash的塊FLASHD中,而在SARAM L0中運行,這只是目標,實際運行時DSP并不會自動將Flash中的代碼拷貝到SARAM中,因此需要手動添加代碼來完成。在C函數中,為了使用變量RamfuncsLoadStart、RamfuncsLoadEnd和RamfuncsRunStart,必須先聲明,本工程在文件DSP2833x_GlobalPrototypes.h中做了如下聲明:extern Uint16 RamfuncsLoadStart;extern Uint16 RamfuncsLoadEnd;extern Uint16 Ramfun
18、csRunStart;然后就可以使用了。在Main.c中,使用MemCopy()函數將段ramfuncs中的函數DSP28x_usDelay()的代碼從裝載地址RamfuncsLoadStartRamfuncsLoadEnd拷貝到RamfuncsRunStart開始的SARAM空間中。之后在程序運行時,只要調用DSP28x_usDelay()函數,都會自動地指向SARAM中相應的函數入口地址,這一點是自動完成的。MemCopy()函數原型在MemCopy.c中,DSP2833x_GlobalPrototypes.h聲明。7.如何將一個函數放到ram中運行? 參考TI公司頭文件中自帶InitFl
19、ash函數,這些函數會以CODE_SECTION申明。如:#pragma CODE_SECTION(InitFlash, "ramfuncs");TMS320F28335筆記-中斷1. 如何開啟某個中斷? 設置中斷向量。例如:PieVectTable.WAKEINT = &wakeint_isr;· 打開PIE控制器。PieCtrlRegs.PIECTRL.bit.ENPIE = 1;· 使能PIE中對應外設的中斷(相應group的相應pin)。例如:PieCtrlRegs.PIEIER1.bit.INTx8 = 1;· 使能CPU的相
20、應中斷(INT1INT12)IER |= M_INT1;· 使能CPU響應中斷EINT;參考網址:2.中斷標志有幾級?作用是什么? 中斷標志主要有三級CPU(有16個標志位)、PIE(有12組每組有12個標志位)和外設(有的外設沒有)。標志位在中斷發生后鎖存中斷狀態,即表示中斷發生。在CPU響應中斷后,會自動清除cpu級別的標志位IFR bit,同時將INTM bit 置位,以防止其它中斷的發生;CPU在從PIE中取中斷向量時PIE會自動清除PIE級別的標志位PIEIFRx.y。所以在進入中斷處理程序后除了外設所有中斷位都已經清除。而中斷處理程序中需要清除PIEACKx和外設的中斷標
21、志位(如果有的話)。參考網址:TMS320F28335筆記-SPI模塊什么是SPI接口? SPI接口是高速同步串行輸入輸出接口。TMS320F28335有幾個SPI接口模塊? 有一個專門的SPI模塊, 另外兩個McBSP也可以配置為SPI接口。TMS320F28335SPI接口由幾組寄存器控制? 12組,位于控制寄存器幀0x7040h開始的位置。所有的寄存器都為16bit寄存器FIFO有幾級? 16級SPI FIFO模式下如何對傳輸和接收FIFO進行操作? 直接對SPITXBUF進行賦值以傳輸數據例如:SpiaRegs.SPITXBUF=sdatai。此操作可理解為:首先使TXFIFO頭指針加
22、1,然后把值寫入TXFIFO頭指針指向的位置。如果當前沒有一個激活的傳輸過程時,對SPITXBUF的寫入會激活一個傳輸過程。 直接讀取SPIRXBUF的值以接收數據例如:rdatai=SpiaRegs.SPIRXBUF,此操作可理解為:首先從RXFIFO頭指針處讀取1個word, 然后使RXFIFO頭指針減1。SPI FIFO模式下傳輸和接收中斷何時產生? 是在數據傳輸或接收結束后,再判斷傳輸和接收FIFO隊列中有多少數據(SPIFFTX.TXFFST4-0和SPIFFRX.RXFFST4-0的值)。對于傳輸FIFO如果FIFO中數據小于等于TXFFIL4-0(此寄存器指定臨界值)指定的值時會
23、觸發中斷,在中斷處理例程中繼續傳輸數據。對于接收FIFO如果FIFO中的值大于等于RXFFIL4-0中指定的值時觸發中斷,在中斷處理例程中接收數據。故FIFO模式下中斷觸發條件除了標準SPI模式下的數據傳輸接收完畢的條件外還要滿足FIFO中的數據小于等于TXFFIL或大于等于RXFFIL設定值的條件,在兩個條件都滿足的情況下才會觸發中斷。另外一般情況下,FIFO模式SPI初始化完后會立即產生以個傳輸中斷,因為此時TXFIFO沒有數據滿足產生中斷的條件。如果只接收數據不發送數據如何激活接收過程? SPI的的接收過程必須依賴傳輸過程,故即使值接收數據也必須對SPITXBUF寫入以激活一個傳輸過程來
24、接收數據。TMS320F28335筆記-McBSP模塊1.McBSP接口總共有幾個?每個McBSP接口有幾根pin? TMS320F28335總共有兩個McBSP接口。每個接口有六根pin, 分別是:MFSX, MFSR, MCLKX, MCLKR, MDX, MDR。 2.McBSP用于SPI模式時使用那些pin?他們和標準SPI pin的對應關系是什么?SPICLK->MCLKXSPISIMO->MDXSPISOMI->MDRSPISTE->MFSXSPITXINT->SPIRXINT->3.McBSP如何開啟clock stop mode以兼
25、容SPI接口? 通過CLKSTP、CLKXP和CLKRP來配置時鐘的極性和延時的SPI兼容模式。DSP28335研發筆記1.如何查看CCS5.2中包含的源文件有哪些?以及他們的位置? CCS5.2工程中C語言源文件有兩部分組成,一部分是在project路徑下的.c文件,另外一部分是通過連接添加到工程里的(.project文件中的<linkedResources></linkedResources>字段)。因此CCS5.2中的源文件一部分在工程目錄下,另外一部分在.project文件中的<linkedResources></linkedResources
26、>字段包含的路徑下。2.CCS中GEL文件的作用是什么? ccs的gel語言是一種交互式的命令,它是解釋執行的,即不能被編譯成可執行文件。它的作用在于擴展了ccsstudio的功能,可以用gel來調用一些菜單命令,對DSP的存儲器進行配置等等。但是作者建議對于使用仿真器和DSP功能板的仿真環境用戶來說,這種GEL語言文件是沒必要加入到配置中的。gel語言的重要性在于針對計算機模擬環境的用戶,使用gel可以為其準備一個虛擬的DSP仿真環境,但也不是非用不可的。3.引用例子中的源文件時要注意什么? 使用CCS5.2導入例子中的源文件時,最好不要選擇連接方式,而使用復制的方式,這樣必要時可以更
27、改這些源文件,而不會影響其他的程序的使用。4.CCS5.2如果沒有包含函數的聲名頭文件時也能運行但是結果會不正常,故當函數調用出現莫名其妙的問題時,要檢查聲名函數的頭文件是否包含。5.CCS5.2開發DSP28335程序時如何設置程序堆棧的大小? CCS5.2默認情況下堆棧的大小都為0x400,在Project->Properties->Build->C200 Linker->Basic Options下設置。設置完堆棧的大小后,還要在cmd文件中分配堆棧存儲空間的 段的位置和大小,棧空間的段名為.stack用于函數中的臨時變量,堆空間的段名為.sysmem用于c語言m
28、alloc函數分配內存,malloc最大可分配內存為Project->Properties->Build->C200 Linker->Basic Options下設置的大小減2。cmd文件中的堆棧段的大小不能小于Project->Properties->Build->C200 Linker->Basic Options下設置的大小。一般來講不用變動棧空間的大小和位置,如果函數中需要大的空間就申請堆空間。堆空間可以指定為外部內存,但要注意在第一次malloc函數調用之前一定要初始化外部內存。否則malloc能執行成功但是空間指向未定。heap大小限制為32k word即0x10000。6.相關參考網站7.如何添加頭文件的相對路徑? 首先在Project->Properties->Build選項下,點擊Variables添加一個變量,然后就可以在Project->Properties->Build->C2000 Compiler->Include Options下用$
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 跨國貨物運輸代理合同范例
- 2025版工程總承包合同EPC模式
- 高層辦公樓建筑深度剖析
- 5《老師 您好》公開課一等獎創新教學設計(表格式)-1
- 局部凍傷的預防與護理
- 高中化學 第2章 元素與物質世界 第1節 元素與物質的分類一、二教學設計1 魯科版必修1
- 電力供應與購買合同
- 人教版小學二年級上冊數學 第6單元 第2課時 8的乘法口訣 教案
- 電商企業股份制聯合入股合同
- 不銹鋼制品施工合同模板
- 2024北京八十中初一(下)期中英語 (教師版)
- 城市更新中的建筑設計策略探討
- 全國應急救援技術競賽理論考試題庫(附答案)
- 2024年遼寧省初中學業水平考試物理模擬卷一
- 居住區規劃智慧樹知到期末考試答案章節答案2024年湖南師范大學
- 安全生產三項制度內容
- 體質健康管理典型案例
- 孩子的電子產品使用與管理
- 2024屆安徽省淮北市高三下學期二模英語模擬試題(有答案)
- 遼寧省本溪市2023-2024學年八年級下學期4月期中物理試題
- 中班幼兒主題墻設計方案
評論
0/150
提交評論