查看: 5729|回复: 6

[求助] 四色卡套件K64之GPIO

[复制链接]

该用户从未签到

8

主题

38

帖子

0

中级会员

Rank: 3Rank: 3

积分
227
最后登录
1970-1-1
发表于 2014-12-19 02:10:48 | 显示全部楼层 |阅读模式
今天对比了下KL46K64GPIOPORT的寄存器,相差不大,可以直接移植,我就把OLED的程序移植到K64上显示。
另外KL系列的还有两种GPIO,一种是普通的 GPIO,另一种是高速的 GPIO(FGPIO) FGPIO 是单总线周期的工作模式,FGPIO可实现1-cycle单周期执行GPIO操作,因此用户在用软件模拟各种协议,比如SPI或者UART等标准时,速度更快,操作更加容易。
今天我就K64的普通GPIO实现软件SPI,来刷OLED
GPIO涉及几个寄存器:
管脚控制寄存器:    Pin Control Register n(PORTx_PCRn)
我们把管脚设为GPIO,我们只需设置MUX10~8位)配置成GPIO模式即可,如手册的说明:
QQ截图20141219013738.png
只要把MUX配置成001即可把你所选择的管脚设置位GPIO,如把PORTC5设置位GPIO模式的例子是:PORTC_PCR5  = PORT_PCR_MUX(1)| PORT_PCR_DSE_MASK;

还有值得提醒的是DSE位,这个位把IO口的驱动能力设置成驱动能力强模式,相对还有驱动能力弱模式,如手册的说明截图:
QQ截图20141219013820.png
管脚数据输出寄存器:Port Data Direction Register (GPIOx_PDDR)
这个寄存器是把管脚的状态输出,把相应管脚的GPIOx_PDDR置一就是设置管脚位输出,否则就是设为输入,如把PORTC5设置为输出的例子:GPIOC_PDDR |= (1<<5);

手册上说明如下:
QQ截图20141219013901.png
管脚置位输出寄存器:Port Set Output Register (GPIOx_PSOR)

这个寄存器是控制PDORn的值,而PDORn如果是1,在管脚设置为输出时,管脚就会输出高电平,否则低电平,如手册的关于PDORn的说明:
QQ截图20141219014042.png
然后用户可以通过对GPIOx_PSOR寄存器写1就是把PDORn设为1,这样管脚就会输出高电平了(在管脚设置为输出时),还有注意的是,对GPIOx_PSOR0是不会影响PDORn寄存器的值的,这点大家要注意,手册的说明如下:
QQ截图20141219014019.png
管脚清零输出寄存器:Port Clear Output Register (GPIOx_PCOR)
这个寄存器跟上面的Port Set Output Register (GPIOx_PSOR)寄存器是一样的,用户对这个寄存器写1,就是把PDORn的值写为0,这样管脚就会输出低电平。同样要注意的是对这个寄存器写0是不会影响到PDORn的值的。手册的说明如下图:
现在我来讲解我的程序的流程吧。
首先是运行执行main函数之前,会进行系统时钟初始化这些操作,把时钟倍频到48M
这部分我前面关于时钟这里有说明,大家可以参考那个帖子:
然后就是进行OLED的初始化,源代码如下:
void LCD_Init(void)        
{
        OLED_GPIO_Init();
         
         LCD_SCL_H;
         //LCD_CS=1;   
         
         LCD_RST_L;
         LCD_DLY_ms(50);
         LCD_RST_H;
         
  Set_Display_On_Off(0x00);           // Display Off (0x00/0x01)
  Set_Display_Clock(0x80);              // Set Clock as 100 Frames/Sec
  Set_Multiplex_Ratio(0x3F);                   // 1/64 Duty (0x0F~0x3F)
  Set_Display_Offset(0x00);             // Shift Mapping RAM Counter (0x00~0x3F)
  SetStartLine(0x00);                               // Set Mapping RAM Display Start Line(0x00~0x3F)
  Set_Charge_Pump(0x04);                // Enable Embedded DC/DC Converter (0x00/0x04)
  SetAddressingMode(0x02);                     // Set Page Addressing Mode (0x00/0x01/0x02)
  Set_Segment_Remap(0x01);                 // Set SEG/Column Mapping    0x00???? 0x01??
  Set_Common_Remap(0x08);                           // Set COM/Row Scan Direction 0x00???? 0x08??
  Set_Common_Config(0x10);                   // Set Sequential Configuration (0x00/0x10)
SetContrastControl(Brightness);         //Set SEG Output Current
  Set_Precharge_Period(0xF1);               // Set Pre-Charge as 15 Clocks& Discharge as 1 Clock
  Set_VCOMH(0x40);                                // Set VCOM Deselect Level
  Set_Entire_Display(0x00);             // Disable Entire Display On (0x00/0x01)
  Set_Inverse_Display(0x00);                   // Disable Inverse Display On(0x00/0x01)  
  Set_Display_On_Off(0x01);           // Display On (0x00/0x01)
  LCD_Fill(0x00);  //????
  LCD_Set_Pos(0,0);
         
         
}
前面是GPIO的初始化,后面是设置OLED的相关显示参数。
OLED管脚的初始化源代码:
void OLED_GPIO_Init(void)
{
  
  //PORTC5PORTC7PORTC9PORTC11设为GPIO
  PORTC_PCR5  = PORT_PCR_MUX(1) | PORT_PCR_DSE_MASK;
  PORTC_PCR7  = PORT_PCR_MUX(1) | PORT_PCR_DSE_MASK;
  PORTC_PCR9  = PORT_PCR_MUX(1) | PORT_PCR_DSE_MASK;
  PORTC_PCR11 =PORT_PCR_MUX(1) | PORT_PCR_DSE_MASK;
  //PORTC5PORTC7PORTC9PORTC11管脚的方向设为输出
  GPIOC_PDDR |= (1<<5);
  GPIOC_PDDR |= (1<<7);
  GPIOC_PDDR |= (1<<9);
  GPIOC_PDDR |= (1<<11);
  //PORTC5PORTC7PORTC9PORTC11的电平初始化为高电平
  GPIOC_PSOR |= (1<<5);
  GPIOC_PSOR |= (1<<7);
  GPIOC_PSOR |= (1<<9);
  GPIOC_PSOR |= (1<<11);
  
}

然后就是我的显示效果图:
IMG_20141218_203011.jpg

我知道答案 目前已有6人回答
回复

使用道具 举报

该用户从未签到

3

主题

57

帖子

0

中级会员

Rank: 3Rank: 3

积分
400
最后登录
2017-11-10
发表于 2014-12-19 08:43:04 | 显示全部楼层
强仔太厉害了,一下子就出了两个评测,其他小伙伴眼馋了没有?
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2017-1-24 09:50
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    654

    主题

    3262

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    13128
    最后登录
    2019-1-27
    发表于 2014-12-19 12:42:56 | 显示全部楼层
    蓝色雪狐 发表于 2014-12-19 08:43
    强仔太厉害了,一下子就出了两个评测,其他小伙伴眼馋了没有?

    我都已经眼馋了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    11

    主题

    835

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1795
    最后登录
    2016-4-2
    发表于 2014-12-20 14:32:32 | 显示全部楼层
    强仔,这个液晶蛮漂亮的~做个MP3应该不错。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-9-17 17:18
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    26

    主题

    394

    帖子

    0

    高级会员

    Rank: 4

    积分
    967
    最后登录
    2019-10-9
    发表于 2014-12-23 10:42:02 | 显示全部楼层
    默默的顶一个,好
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    20

    帖子

    0

    注册会员

    Rank: 2

    积分
    79
    最后登录
    1970-1-1
    发表于 2014-12-24 11:27:09 | 显示全部楼层
    了解一下。飞思卡尔MAPS 四色板系列主要是用来做KINETIS 系列评测吧,和以前飞思卡尔推出的塔式开发平台有什么区别呢?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8

    主题

    38

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    227
    最后登录
    1970-1-1
     楼主| 发表于 2014-12-24 21:00:31 | 显示全部楼层
    邦德老王 发表于 2014-12-24 11:27
    了解一下。飞思卡尔MAPS 四色板系列主要是用来做KINETIS 系列评测吧,和以前飞思卡尔推出的塔式开发平台有 ...

    差不多吧,只不过塔式开发平台的接口好难拓展,MAPS板的接口都是排针,比较好接出
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-22 01:01 , Processed in 0.101226 second(s), 28 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表