查看: 788|回复: 0

飞思卡尔MAPS四色板体验(三)

[复制链接]

该用户从未签到

发表于 2015-5-4 20:32:42 | 显示全部楼层 |阅读模式
分享到:
实验二
实验目标:利用遥感开关往不同方向按下时在LCD显示屏分别显示表示方向的箭头。
实验原理:
(1)GPIO:K60的I/O口具有多功能信号复用、DMA或中断触发控制以及GPIO功能。
GPIO是单片机同外围设备数据传输的通道。单片机的大部分I/O口方向寄存器来配置成为输入或者输出功能。I/O作为输入使用时,可以对输入的信号进行检测,根据输入信号的电压大小,单片机可以将相应的电压信号转化为逻辑信号。
(2)Joystick:五个按键,包括上下左右和中间的按键,中间的select按键有外部的上拉电阻,其他四个方向键可以自由配置上拉或下拉电阻。当按下按键时相应的GPIO口就能检测到按键状态。
(3)LCD:像素为320X240。
(4)FlexBus:
知识点1:GPIO配置
(1)引脚控制寄存器:PORTx_PCRn

                                             
10-8:引脚复用功能选择:可以配置为GPIO、中断或其他复用功能等,当这三位配置为001时是GPIO功能。
(2)GPIO时钟配置寄存器:SIM_SCGC5

  
13-9.PORTx:分别使能或禁止端口时钟;
(3)GPIO数据方向寄存器:GPIOx_PDDR

  
31-0.PDD:配置为0则为输入,配置为1则为输出
(4)GPIO数据输入寄存器:GPIOx_PDIR

  
GPIO口会将读入的数据转化为高或低电平。
实验步骤:
  1.确定原理图引脚

  
其中UP按键与PORTA24脚相连,RIGHT按键与PORTA26脚相连,LEFT与PORTA27脚相连,DOWN按键与PORTA25脚相连,SELECT按键与PORTA4脚相连。
2.软件部分
  (1)GPIO引脚重命名
   //by zsy
   kGpio_up=GPIO_MAKE_PIN(HW_GPIOA,24U),
   kGpio_down=GPIO_MAKE_PIN(HW_GPIOA,25U),
   kGpio_left=GPIO_MAKE_PIN(HW_GPIOA,27U),
   kGpio_right=GPIO_MAKE_PIN(HW_GPIOA,26U),
   kGpio_select=GPIO_MAKE_PIN(HW_GPIOA,4U),
(2)引脚配置
//by zsy 2015/4/30
const  gpio_input_pin_user_config_t upkey[] = {
  {
  .pinName = kGpio_up,
  .config.isPullEnable = true,
  .config.pullSelect = kPortPullUp,
  .config.isPassiveFilterEnabled = false,
  .config.interrupt = kPortIntDisabled,
  },
// {
//  .pinName = GPIO_PINS_OUT_OF_RANGE,
//  }
};
其他GPIO口如downkey、leftkey、rightkey、selectkey相同配置。
(3)使能端口时钟,配置方向与初始化
  SIM_HAL_EnablePortClock(SIM_BASE, 0); //initial PORTA clock
  //initial upkey
  GPIO_DRV_SetPinDir(kGpio_up,kGpioDigitalInput); //
  PORT_HAL_SetMuxMode(PORTA_BASE,0x18, kPortMuxAsGpio);
GPIO_DRV_InputPinInit(upkey);
其他端口类似配置
(4)LCD配置与初始化
  /* Initialize standard SDK demo application pins */
  for (i = 0; i < HW_PORT_INSTANCE_COUNT; i++) {
  CLOCK_SYS_EnablePortClock(i);
  }
  lcd_flexbus_init();
  CLOCK_SYS_GetFreq(kFlexBusClock,&freq);
  LCDC_Init();
(5)设置指针指向图片信息,并拷贝图片数据到SDRAM中
  //Copy image data to sram
  for(i=0; i<320*240; i++)
  {
  p1 = *((uint16_t *)&gImage_ecbc[j]);;
  j+=2;
  }
  LCDC_Bmp(0,0,320,240,(unsigned short *)p1);
  //for(i=0;i<1000000;i++);
(6)进入主循环,获取按键的信息,分别显示对应的按键图片
  while(1)
  {
  upkey_value=GPIO_DRV_ReadPinInput(kGpio_up);
  downkey_value=GPIO_DRV_ReadPinInput(kGpio_down);
  leftkey_value=GPIO_DRV_ReadPinInput(kGpio_left);
  rightkey_value=GPIO_DRV_ReadPinInput(kGpio_right);
  selectkey_value=GPIO_DRV_ReadPinInput(kGpio_select);
  //
  if(upkey_value == 0)
  {  
  //LCDC_Init();
  j=0;
  for(i=0; i<320*240; i++)
  {
  p1 = *((uint16_t *)&gImage_up[j]);;
  j+=2;
  }
  LCDC_Bmp(0,0,320,240,(unsigned short *)p1);
  //for(i=0;i<10000000;i++);
  for(i=0;i<100;i++);
  //LCDC_Init();
  }
其他按键类似
实验现象:
如下图所示
(1)上电初始化

  
(2)按向上的按键

  
(3)按向下的按键

  
(4)按向左的按键

  
(5)按向右的按键

  
(6)按中间的按键

飞思卡尔MAPS四色板体验(二)
飞思卡尔MAPS四色板体验一
MAPS四色板专业评测
本文为ECBC实战营独家授权爱板网经验频道发布,未经允许,谢绝转载。
ECBC实战营:以实际产品为切入点,通过实际产品解耦信号链各个节点中的重点技术、产品、设计思路,同时会在整个实战过程中锻炼每个学员的项目分割能力、团队协调能力、表达演讲能力等综合素养。借助三个月的高强度、快节奏的系统性实战训练,让真正热爱电子技术的学生、工程师、创客迅速积累真正优秀工程师和技术管理者应该具备的专业技能、全局思维、职业素养,不仅让学员走向实际工作岗位后迅速适应、迅速成为职场的中坚力量,更为学员未来成为技术型管理人才和技术型创业人才奠定必要、坚实的综合基础。
ECBC实战营二期详情
ECBC实战营第二期招生简章
ECBC实战营奖学金申请
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /4 下一条

手机版|小黑屋|与非网

GMT+8, 2024-12-19 07:54 , Processed in 0.124360 second(s), 17 queries , MemCache On.

ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

苏公网安备 32059002001037号

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.