QNX-----IMX6UL最简单的LED点灯程序
QNX的应用开发程序比较简单,因为QNX 提供专门的集成开发工具QNX Momentics IDE ,通过该工具可以快速的进行应用程序设计,在QNX程序里,每一个应用都是从main开始的。
首先看硬件连接,在硬件原理图上,提供两个LED接口,分别接到了SNVS_TAMPER1和SNVS_TAMPER2。因此程序需要对这两个进行设置。
IMX6UL处理器需要把SNVS_TAMPER1和SNVS_TAMPER2配置成IO口,代码如下:
主函数如下:
int main(int argc, char *argv[])
{
_Uintptrt prt;
uint32_t reg;
iomux_ctl = mmap_device_io(0x1000, MX6X_IOMUXC_BASE);
gpiopinmuxsetswmux(IMX6UL_SWMUX_SNVS_TAMPER1, MUX_CTL_MUX_MODE_ALT5 | MUX_CTL_SION);
gpiopinmuxsetpadcfg(IMX6UL_SWPAD_SNVS_TAMPER1, MX6X_PAD_SETTINGS_GPIO);
gpiopinmuxsetswmux(IMX6UL_SWMUX_SNVS_TAMPER2, MUX_CTL_MUX_MODE_ALT5 | MUX_CTL_SION);
gpiopinmuxsetpadcfg(IMX6UL_SWPAD_SNVS_TAMPER2, MX6X_PAD_SETTINGS_GPIO);
prt=(_Uintptrt) mmap_device_memory( 0,
sizeof(gpioDefinest),
PROT_READ|PROT_WRITE|PROT_NOCACHE,
0,
(0x20AC000) );
gpioarray[5] = (gpioDefinest*)(prt);
reg=gpioarray[5]->gpiodata;
reg |= (1<<1);
reg |= (1<<2);
printf("reg %x\r\n",reg);
gpioarray[5]->gpiodir=reg;
reg=gpioarray[5]->gpiodir;
reg |= (1<<1);
reg |= (1<<2);
gpioarray[5]->gpiodir=reg;
printf("reg %x\r\n",reg);
while(1)
{
printf("LED1 0N LED2 OFF\r\n");
reg=gpioarray[5]->gpiodata;
reg |= (1<<1);
reg &= ~(1<<2);
gpioarray[5]->gpiodata=reg;
usleep(100000);
printf("LED1 0FF LED2 ON\r\n");
reg=gpioarray[5]->gpiodata;
reg &= ~ (1<<1);
reg |= (1<<2);
gpioarray[5]->gpiodata=reg;
usleep(100000);
}
}
编译生成Led文件,然后拷贝QNX系统上,
在串口超级终端执行./Led 命令,就可以看到两个LED在闪烁,同时LED显示灯状态。