nios中關於串口(uart)的一種非常簡單的操作方式


板子是黑金的。    

    昨天看書,是關於nios中字符設備的使用,有關於uart的內容,看到一個使用系統函數操作uart口的方式,當時很感興趣,感覺很方便,因為不用自己寫驅動程序。然后按照書上的方式做了一下,經過驗證和調試,發現這種方式的確很簡單,在此和大家一起分享。     首先解釋一下,這里所謂的字符設備。在nios中,系統將flash,uart,lcd以及dma等設備抽象化為字符設備,以方便開發者進行使用。程序開發只需要獲得被操作設備的文件描述符,然后使用系統的文件函數來讀寫,獲取設備中的數據。 當然開發者也可以自己寫驅動程序,但是那是相當的繁瑣的。所以建議大家還是使用系統自帶的程序,因為這樣程序簡潔一些,可移植性也強一些。 前幾天也做過uart口的實驗,是按照黑金視頻中提供的方式來弄的,驅動程序和頭文件都自己寫的,因為程序較長,所以還是很麻煩。關於那個較長的程序就不說了,現在直接說那個簡單的操作吧。

#include "system.h"

#include <unistd.h>

#include <stdio.h>

#include "../inc/sopc.h"

#include<string.h>

#include"sys/alt_cache.h"

int main(void)

{

    printf("This application will print 'hello 88' to uart!\n");

    char *msg="you are successful!\n";

     FILE *fp;  

     while(1) {  

      fp=fopen("/dev/uart","w");

      if(fp!=NULL) {  

       alt_dcache_free(msg);  

       fprintf(fp,"%s",msg);

               fclose(fp);

            }

         usleep(100000);

       }

return 0;

}

    這里需要注意一下這個函數alt_dcache_free(msg); 因為我用的cpu的核是f核,高速的核配備了數據緩存,正常情況下,數據都會先進入緩存,但是數據進入緩存就會導致輸出出錯。所以這里需要把發送的數據旁路掉了,避免進入到緩存中。當然數據緩存旁路有很多方式,我這里僅僅提供一種而已。

    另外那個文件描述符的句柄,因為書中沒定義,我就用了FILE來定義,因為其他的文件描述符指針,都是和這個類型兼容的。 至於結果就不貼圖片呢,百度空間這個編輯不是很方便,大家有興趣可以試一下。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM