자일링스 AXI GPIO 사용법
6361 단어 FPGAMicroBlazexilinxVivadozynq
개요
Xilinx AXI GPIO를 Zynq와 Microblaze에서 사용하는 방법에 대해 공식 Baremetal Driver를 사용하여 씁니다.
환경
Bitstream 만들기
2개의 LED를 GPIO1에, 2개의 스위치를 GPIO2에 연결했습니다.
GPIO1은
All Outputs
, GPIO2는 All Inputs
플래그를 활성화합니다.샘플 코드
갑자기, LED를 켜고 스위치를 읽는 코드는 다음과 같습니다.
Hello World
의 템플릿에 이것을 복사하면 초기화와 기본 동작을 시도할 수 있습니다.#include <stdio.h>
#include "platform.h"
#include "xil_printf.h"
#include "xgpio.h"
#define LED_CHANNEL 1
#define SW_CHANNEL 2
XGpio gpio_0;
int main(){
int status;
init_platform();
// AXI GPIOドライバの初期化
status = XGpio_Initialize(&gpio_0, XPAR_GPIO_0_DEVICE_ID);
if(status != XST_SUCCESS){
xil_printf("XPAR_GPIO_0_DEVICE_ID initialization failed.\n");
return XST_FAILURE;
}
// 入出力方向の設定 0:出力 1:入力
XGpio_SetDataDirection(&gpio_0, LED_CHANNEL, 0x0); // all output
XGpio_SetDataDirection(&gpio_0, SW_CHANNEL, 0xFFFFFFFF); // all input
// LED点灯 (32bitを一度にセット)
XGpio_DiscreteWrite(&gpio_0, LED_CHANNEL, 0b11);
// 指定したビットだけクリア (0にセット)
XGpio_DiscreteClear(&gpio_0, LED_CHANNEL, (1<<1));
// 指定したビットだけセット (1にセット)
XGpio_DiscreteSet(&gpio_0, LED_CHANNEL, (1<<0));
// スイッチの値を読み出し
u32 sw_state = XGpio_DiscreteRead(&gpio_0, SW_CHANNEL);
xil_printf("SW=%08x\n", sw_state);
cleanup_platform();
return 0;
}
인터럽트 활성화
// AXI GPIOの割り込みを有効化 (GPIO2のみ有効)
XGpio_InterruptEnable(&gpio_0, SW_CHANNEL);
// AXI GPIOのグローバル割り込みを有効化
XGpio_InterruptGlobalEnable(&gpio_0);
// 割り込みハンドラ
void GpioHandler(void *CallbackRef){
XGpio *GpioPtr = (XGpio *)CallbackRef;
// 割り込みをクリア
XGpio_InterruptClear(GpioPtr, SW_CHANNEL);
}
MicroBlaze에서 GPIO 인터럽트를 테스트한 기사는 여기입니다.
h tp : // / l lp. 하테나 bぉg. jp/엔트리/2018/09/24/005413
참고
내가 이전에 쓴 블로그이지만 블로그 이름으로 인해 기사가 찾기 어려웠기 때문에 Qiita에 재게재하고 있습니다.
h tp : // / l lp. 하테나 bぉg. jp/엔트리/2017/11/06/204748
Reference
이 문제에 관하여(자일링스 AXI GPIO 사용법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/s_nkg/items/800e0559332495605056텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)