基於ZYNQ 7000開發板的除錯系列(5)

2021-10-05 17:16:05 字數 4516 閱讀 6821

這一部分是基於基於zynq-7000開發板的除錯系列(4)繼續展開的,主要的部分是需要兩個定時器開啟中斷開始。這一部分主要是需要使用ttc,完成2組流水燈的同時工作,兩組的頻率也不一致。

[參考自zynq7000 trm (page.245-249)]

ttc可以完成的工作比較多,其實ttc的使用是可以控制gpio的占空比。這個的最簡單的使用例程就是做乙個呼吸燈。但是需要使用到pl的pwm,這裡就先不涉及這一部分的內容了。

[參考自zynq高階之路8–ps端實現emio ttc pwm輸出(與pl端pwm聯合使用)]

其實這裡主要就是需要把ttc0和ttc1開啟,這裡提供的emio是可以向外輸出波形的,這裡可以並不需要,所以這裡可以不用向外提供介面。具體的diagram圖大概是這個樣子的。

然後這裡就沒有其他需要修改的部分了,這裡生成bitstream即可。

#include

"xttcps.h"

然後是關於ttc的函式:

初始化

xttcps_config *

xttcps_lookupconfig

( u16 deviceid);

s32 xttcps_cfginitialize

( xttcps *instanceptr,

xttcps_config * configptr,

u32 effectiveaddr

);

定時器配置

s32 xttcps_setoptions

( xttcps *instanceptr,

u32 options);

//關於ttc的模式配置

void

xttcps_calcintervalfromfreq

( xttcps *instanceptr,

u32 freq,

xinterval *interval,

u8 *prescaler);

//通過使用者給定的頻率計算分頻和間隔的數值,並賦值到指定的位址上

void

xttcps_setinterval

( xttcps *instanceptr;

xinterval interval);

// 該函式實質上就是往暫存器裡寫入值

void

xttcps_setprescaler

( xttcps *instanceptr,

u8 prescalervalue);

// 該函式按照指定的分頻向暫存器內寫入值

void

xttcps_enableinterrupts

( xttcps *instanceptr,

u32 interruptmask);

// 該函式實質上就是往暫存器裡寫入值,使能ttc中斷

定時器開始

xttcps_start

( xttcps *instanceptr);

// 該函式實質上就是往暫存器裡寫入值,開始計數

中斷內函式

u32 xttcps_getinterruptstatus

( xttcps *instanceptr);

// 檢測是否已經觸發了中斷

void

xttcps_clearinterruptstatus

( xttcps *instanceptr,

u32 statusevent);

// 如果觸發中斷,該部分解除中斷

#include

"xparameters.h"

#include

"xgpio.h"

#include

"xgpiops.h"

#include

"xttcps.h"

#include

"xstatus.h"

#include

"xscugic.h"

#include

"xil_exception.h"

#define ps_gic_device_id xpar_scugic_single_device_id

#define ledg1_intr_id xpar_xttcps_0_intr

#define ledg2_intr_id xpar_xttcps_3_intr

#define led1_intr_device_id xpar_xttcps_0_device_id

#define led2_intr_device_id xpar_xttcps_3_device_id

#define led1_freq_hz 2

#define led2_freq_hz 3

#define pl_gpio_device_id xpar_gpio_0_device_id

#define ps_gpio_device_id xpar_xgpiops_0_device_id

#define pl_led_channel 1

#define pl_key_channel 2

#define ps_bank xgpiops_bank0

#define pl_led0 0x01

#define pl_led1 0x02

#define pl_led2 0x04

#define pl_led3 0x08

#define pl_led4 0x10

#define ps_led0 0x09

#define ps_led1 0x00

typedef

struct

tmrcntrsetup;

volatile u8 led_status =

0x00

;volatile u8 state1;

volatile u8 state2;

volatile u8 plled;

volatile u8 psled;

xgpio plgpio;

xgpiops psgpio;

xttcps pstimer1;

xttcps pstimer2;

xscugic psgic;

static tmrcntrsetup timer1setup =

;static tmrcntrsetup timer2setup =

;int

init()

;void

run();

intinit_gpio()

;int

init_exti()

;int

init_gpio_pl()

;int

init_gpio_ps()

;int

init_exti_timer1()

;int

init_exti_timer2()

;int

init_exti_gic()

;void

psintrtimer1handler

(void*)

;void

psintrtimer2handler

(void*)

;// 0

intmain()

// 1

intinit()

void

run(

)break

;case2:

break

;case3:

break

;case4:

break

;case0:

break

;default:}

switch

(state2)

break

;case1:

break

;default:}

}}// 2

intinit_gpio()

intinit_exti()

// 3

intinit_gpio_pl()

intinit_gpio_ps()

intinit_exti_timer1()

intinit_exti_timer2()

intinit_exti_gic()

void

psintrtimer1handler

(void

*ref)}}

void

psintrtimer2handler

(void

*ref)

}}

該部分**和之前沒有太大的出入,完成流水燈部分**。

zynq7020開發板 Z turn除錯計畫

參加公尺爾zynq7020開發板試用活動。收到公尺爾z turn板子後,焊接了乙個jtag轉接板,以方便除錯pl部分,對於後面的除錯部分,主要分三個部分走 1 除錯fpga部分,實現邏輯控制外圍簡單的裝置,比如點個燈什麼的,用verilog語言實現,後期需要實現外部ad板卡的資料採集,並分析相關邏輯...

如何修改zynq開發板的靜態ip位址

當應用程式編譯成功後,在開發板輸入tftp g r hi j 192.168.1.11後板子提示network unreachable,使用ifconfig eth0命令查詢發現好像網絡卡沒有啟動,然後ifconfig eth0 192.168.1.10 netmask 255.255.255.0 ...

MicroPython的開發板

比如 pyboard micro bit esp8266 esp32 stm32等等 pyboard是官方的micropython微控制器板,完全支援軟體功能。硬體有 micro bit是由英國廣播公司bbc推出的可程式設計微型計算機,可以幫助使用者學習基礎程式設計知識。它最大的亮點在於支援圖形化程...