MAX14830 4UART通道單傳送功能實現

2021-08-18 18:23:07 字數 3234 閱讀 7294

max14830 是美信的一款spi轉4串列埠晶元,用來擴充套件串列埠的。spi最高26mhz,4個串列埠可配置不同的波特率,最快24mhz。硬體上的連線很簡單,參考手冊66頁上都有寫。

通過片選cs引腳,可以用同乙個spi介面控制數個max14830。前期設計時就要考慮好後期需要使用的波特率,主要是買合適的晶振。推薦用有源晶振,從xin輸入,範圍在第10頁有說明,0.5-35m。雖然內部能6 8 48 96 144倍頻,和1-63分頻,但倍頻是有範圍的,在51頁有說明。

接下來說怎麼用spi來控制這個**。

spi是四線的,sclk  mosi miso cs, 用硬體spi時,mosi和miso不用交叉接,直連,通過配置spi的主從來控制方向。spi讀寫的時序如下,在58-59頁:

硬體spi有幾個設定,速率,極性

cpol和相位cpha。在58頁說了,2個都是0,cpol=0,sclk在空閒時是低電平,cpha=0,在sclk第乙個沿,也就是上公升沿取樣。

從寫時序看,cs為低後,連著寫8位的a位址,再寫8位的d資料。讀時序看,先寫8位位址,再寫8位任意數,同時讀出8位資料。因為spi是主從關係的,從發資料給主都要主提供sclk時鐘,主傳送第乙個資料時,也會在miso資料線上得到8位資料,主傳送第二個資料時,就會得到前面傳送資料返回的數。也就是說,spi讀寫都是一起的。這個過程可以用io模擬也可以用硬體spi,這裡略過。

然後說怎麼除錯max14830。先調spi讀寫。

unsigned char spi_writeread(unsigned char reg,unsigned char data)

這個函式的功能是先寫reg,再寫data,並返回寫data時讀到的資料。

文件28頁說明了spi寫暫存器的格式。

首尾是讀寫控制,1 寫  0讀,u1 u0是uart位址,a4-a0是暫存器位址。

文件54頁說。

有個擴充套件位址,1f是全域性暫存器,往裡面寫ce,就是使用擴充套件位址,使用擴充套件位址後,位址變成0010 a3 a2 a1 a0。讀revid來測試spi讀寫。寫完ce後,讀revid,再寫cd改回來。

於是,先復位,再拉高cs初始化。讀寫正確就會得到乙個值,如上面所述,b4。

void mx14830_init(void)

{rst0_low();

hal_delay(1000);

rst0_high();

cs0_high();

hal_delay(1000);

spi_writeread(0x9f,0xce));

uart_send(spi_writeread(0x25,0xff));

spi_writeread(0x9f,0xcd));

除錯好spi後,就除錯傳送。簡單說,關掉clkdisable,0x1b[6],clksource裡設定pllen關掉,用pllbypass,使能crytalen,用外部有源晶振,設定波特率dvilsb,dvimsb,0x1b裡還有小數分頻fract。計算方法在21頁。再配置0x0b,串列埠的資料長度,停止位,校驗。再使能clkdisable,同時設定fract和x2 x4mode。需要注意的是紅框中的16和x2 x4mode沒有關係,這是只是小數分頻,無論是x2 x4模式,都可以用16個小數分頻。

uart0-3要分別設定,每個uart都可以配置不同的波特率,port要移位,是u0 u1 在第5 6 位,第7 位是讀寫,寫是1,要或上1000 0000。

最後是傳送資料。

void mx14830_send(unsigned char port,unsigned char data)

{spi_writeread(port<<5|0x80,data);//[6] set1 to disable clk  

除錯波特率的時候,拿邏輯分析儀或者示波器看波形,算出波特率,看看是不是要配置的波特率,還差多少。上面的配置是1.8432m晶振,x4 mode,配置256000波特率,實際是263.314khz,用256000hz接收能收到,誤差2.86%。

至於接收可以迴圈讀取sysint,判斷是誰有資料,讀出來就行了,fifo是128位元組,據說太多了就不再接收,要復位才行,沒用過。

Max匯出外掛程式

編寫max匯出外掛程式目前有兩種選擇,一種是使用max指令碼,另一種就是使用max sdk了。使用max sdk又分為使用max標準api和igame介面。我使用igame介面編寫max匯出外掛程式。igame介面就是在max標準api的基礎上有針對性地對遊戲匯出進行了封裝,將通常繁瑣的操作呼叫簡化...

max函式的使用

初級技巧 tmp max 1,2,4 print tmp 4 可迭代物件 a 1,2,3,4,5,6 tmp max a print a 6中級技巧 key屬性的使用 當引數不為空時,就以key的物件作為判斷的標準。如果我們想找一組數中絕對值最大的數,就可以配合lambda函式先進行處理,再找出最大...

MAX匯入匯出外掛程式略

下午的時候假裝很無聊,於是就無聊到去寫當時說的匯入外掛程式。用嚮導生成匯入外掛程式的 雛形,鑑於嚮導生成 的冗餘,便對 進行精簡。首先嚮導生成的 都不能直接執行,通常的錯誤表現為 1 巨集定義重複使用了相同的數值 2 類描述中的create方法應修改為 3 類描述中的createmanipulato...