您的位置 首页 ADAS

SAM4E单片机之旅——13、LCD之ASF开始

在AtmelStudio6中,集成了AtmelSoftwareFramework(ASF框架)。通过它提供的库,可以很快速地完成新的项目。这次的最终目标使用ASF在LCD上显示出文字“Hell

  在Atmel Studio 6中,集成了Atmel Software Framework(ASF结构)。经过它供给的库,能够很快速地完结新的项目。

  这次的最终方针运用ASF在LCD上显示出文字“Hello World!”,现阶段方针是点亮LCD的背光,学习方针是了解怎样样运用ASF供给的模块。

  一、 ASF Wizard

  新建一个项目,依据所运用的开发板挑选模板。

    

wps_clip_image-12098

 

  然后能够经过ASF Wizard进行所需模块的装备。

    

wps_clip_image-12152

 

  默许情况下,现已挑选了两个模块。在之前咱们曾经运用过了其间Generic board support模块供给的头文件sam4e_ek.h了。

    

wps_clip_image-18626

 

  为了解模块增加的办法,先把这两个模块移除。

  二、 经过ASF设置时钟

  增加模块

  在可用模块里找到“System Clock Control”模块,打开它。

    

wps_clip_image-22996

 

  能够看到它依靠的模块,以及相应的API文档等内容。

  增加该模块后,它会主动地把依靠的模块增加进去。增加完结后点击Apply按钮,使改动收效。

  现在在asf.h文件中,就现已导入了一系列的模块相关的头文件。如刚刚运用的体系时钟操控模块的:

  // From module: System Clock Control – SAM4E implementation

  #include 

  一起,在文件夹config下,多了一个文件conf_clock.h。

    

wps_clip_image-20415

 

  装备

  conf_clock.h里保存的便是时钟相关的装备了。这儿面的注释很清楚,装备办法也很简单。并且在该文件的结尾也阐明晰默许情况下,装备的成果:

  // ===== Target frequency (System clock)

  // – XTAL frequency: 12MHz

  // – System clock source: PLLA

  // – System clock prescaler: 2 (divided by 2)

  // – PLLA source: XTAL

  // – PLLA output: XTAL * 16 / 1

  // – System clock: 12 * 16 / 1 / 2 = 96MHz

  为了使这个时钟的装备收效,调用sysclk_init()即可:

  #include 

  int main (void)

  {

  sysclk_init();

  while(1);

  }

  编译

  可是在编译时,发现短少头文件board.h。这阐明ASF Wizard在处理依靠时也有那么一点Bug。测验再手动增加一个模块Generic board support,再编译,发现又短少头文件ioport.h,持续增加模块IOPORT,编译经过。IOPORT模块依靠了System Clock Control模块,能够将手动增加的这个模块删去,至此,又回到了新建项目时的模块设置了。

  增加不必要的模块会增加编译的时刻,也或许会增加生成的方针文件的巨细。假设了解相关头文件的效果,也能够修正asf.h中包括的头文件。

  其他,也能够经过了解ASF中函数的完结,来学习相关的装备进程。

    

wps_clip_image-29383

 

  检查MCK的频率

  如sysclk_init()相同,ASF中完结了许多常用的功用。如咱们需求检查MCK的频率的话,也很简单:

  volatile uint32_t freq;

  freq = SystemCoreClock; /* 4 000 000 */

  /* 这个函数是依据conf_clock.h中宏的界说来核算的。

  便是调用sysclk_init()后MCK的值 */

  freq = sysclk_get_cpu_hz(); /* 96 000 000 */

  sysclk_init();

  /* 调用sysclk_init()后会主动修正这个变量 */

  freq = SystemCoreClock; /* 96 000 000 */

  三、 LCD背光操控器

    

wps_clip_image-15044

 

  开发板运用的LCD背光操控器是AAT31系列的。一起PC13衔接的是它的使能、操控引脚。

  其他,假定咱们不知道这个背光操控器的亮度操控办法是向EN/SET引脚发送N个脉冲波,那该怎样运用这个操控器呢?RTFM?找它的芯片手册当然是一个能够深化了解它的办法,但假设咱们的方针仅仅是能用就好,又或是运用起来过分费事呢?

  嗯,咱们这次学的便是ASF。

  增加模块

  在ASF Wizard中增加Display – AAT31XX Backlight Controller模块。增加后项目里多了个头文件conf_at31xx.h,这个头文件首要的效果便是在未界说EN/SET引脚的接线时,对其进行界说(在sam4e_ek.h这个文件中现已做好相关的界说了)。一起asf.h中也包括了相关的头文件了。

  ASF中对组件进行初始化

  运用背光操控器之前,需求进行相关装备。这个作业能够手动完结,也能够运用ASF完结。

  在conf_board.h文件里,能够指定好一系列需求装备的组件。然后在履行board_init()函数时,就能够依据这些宏的界说履行相应的初始化作业。这个头文件里现现已过注释阐明晰装备USART等引脚时,宏是怎么界说的,可是却不知道怎么背光组件相关的界说。

  检查board_init()的完结,能够发现以下几句:

  #ifdef CONF_BOARD_AAT3155

  /* Configure Backlight control pin */

  ioport_set_pin_dir(BOARD_AAT31XX_SET_GPIO, IOPORT_DIR_OUTPUT);

  #endif

  经过这儿就能够得到需求的宏的姓名,以及ASF初始化时详细的作业了。现在就在conf_board.h中,加上相应的界说就好了:

/* Configure Backlight control pin */

  #define CONF_BOARD_AAT3155

  其他,aat31xx.h头文件也需求这个宏的声明以判别详细的操控器的类型。

  最终不要忘掉调用board_init( )函数。

  API的运用

  能够检查相应的API的文档,以了解ASF供给的API。

    

wps_clip_image-20800

 

  更直接的办法是阅览相应的头文件(aat31xx.h),这儿面或许会有一些文档中未说到的部分。如以下几个宏就未在API文档中阐明:

  #define AAT31XX_MIN_BACKLIGHT_LEVEL 1

  #define AAT31XX_AVG_BACKLIGHT_LEVEL 8

  #define AAT31XX_MAX_BACKLIGHT_LEVEL 16

  现在,就能够很方便地运用背光操控器了。如以下代码将装备背光为最大亮度:

  1aat31xx_set_backlight(AAT31XX_MAX_BACKLIGHT_LEVEL);

  四、 LCD操控器

  开发板运用的LCD操控器是ILI93xx系列的。ASF供给的模块为Display – ILI93xx LCD Controller。conf_board.h中,相应的宏声明为CONF_BOARD_ILI93XX。

  board_init( )中初始化的作业仅有装备GPIO引脚的复用,可是还有其他作业需求完结。所以LCD暂时还不能用。剩余的部分鄙人一次阐明。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/adas/203913.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部