這一部分是基於基於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即可。
然後是關於ttc的函式:#include
"xttcps.h"
初始化
定時器配置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推出的可程式設計微型計算機,可以幫助使用者學習基礎程式設計知識。它最大的亮點在於支援圖形化程...