查看: 5031|回复: 20

[求助] 定义8位并行数据

[复制链接]
  • TA的每日心情
    开心
    2019-2-14 16:49
  • 签到天数: 296 天

    连续签到: 1 天

    [LV.8]以坛为家I

    241

    主题

    2239

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    4473
    最后登录
    2020-4-14
    发表于 2015-12-28 09:36:31 | 显示全部楼层 |阅读模式
    本帖最后由 zhjb1 于 2015-12-28 14:51 编辑

    如题,如何在KL26中定义8位并行数据、设置16位数据?谢谢
    在K10~60中可以:
    #define GPIO_PIN_MASK 0x1Fu
    #define GPIO_PIN(x)(((1)<<(x & GPIO_PIN_MASK)))
    #define dat GPIOD_PDDR//the 16bits Data
    以后在程序中,dat代表16位宽的PORTD并行数据。
    上述代码加入到KL26中没有报错,但在以后的运行中不见效果。我的测试是:
    向dat中写入0x55,延时,再写入0xaa,再延时,结果有个别位发生反转,都不是对应的0246和1357的反转,因此代码在KL26中应该部分实现。纤细的位没有仔细分析。

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

    使用道具 举报

    该用户从未签到

    145

    主题

    4926

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    9267
    最后登录
    1970-1-1
    发表于 2015-12-28 15:31:54 | 显示全部楼层
    控制方法其实是一样的。
    关键是你要看看你用的是什么口?
    相关IO的默认MUX是什么?你需要把相关的IO配置为GPIO才行。
    另外,你要检查下,相关的顺序引脚是否都存在。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-2-14 16:49
  • 签到天数: 296 天

    连续签到: 1 天

    [LV.8]以坛为家I

    241

    主题

    2239

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    4473
    最后登录
    2020-4-14
     楼主| 发表于 2015-12-28 16:16:30 | 显示全部楼层
    本帖最后由 zhjb1 于 2015-12-28 16:18 编辑

    KL26连续引脚有GPIOD0~7;GPIOC0~11,实际上我可以采用GPIOD的8位和GPIOC的0~7的8位,两个8位就能构成1个16位。
    现在的问题是:我手头没有详细的KL26的寄存器配置手册,目前下载的手册多为声明以及技术参数等手册,无法找到像K10~K60的寄存器配置手册。
    在K10中,I/O设置为:
    #define GPIO_PIN_MASK 0x1Fu//0x1f=31
    #define GPIO_PIN(x)(((1)<<(x & GPIO_PIN_MASK)))
    #define dat GPIOD_PDDR//16bits Data
    D口就是16位的了,并且程序可以引用dat为16位DI/O口;
    再在ioIntial()中定义:
    PORTD_GPCLR=0xFFFF0100;
    GPIOD_PDDR=0xFFFF;
    之后dat就完全可以了。
    我按照前述定义PORTD不报错,在IO初始化中依葫芦画瓢,也不报错,但无法实现并口的I/O模式。
    恳请告我如何设置,或者能给一份KL26寄存器配置说明,中英文不限。先谢谢了。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    145

    主题

    4926

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    9267
    最后登录
    1970-1-1
    发表于 2015-12-28 16:20:15 | 显示全部楼层
    zhjb1 发表于 2015-12-28 16:16
    KL26连续引脚有GPIOD0~7;GPIOC0~11,实际上我可以采用GPIOD的8位和GPIOC的0~7的8位,两个8位就能构成1个16 ...

    KL26的参考手册:
    http://cache.nxp.com/files/micro ... on&fileExt=.pdf
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-2-14 16:49
  • 签到天数: 296 天

    连续签到: 1 天

    [LV.8]以坛为家I

    241

    主题

    2239

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    4473
    最后登录
    2020-4-14
     楼主| 发表于 2015-12-28 16:24:33 | 显示全部楼层
    本帖最后由 zhjb1 于 2015-12-28 16:29 编辑

    谢谢,我先看看手册。
    看了几眼,这手册正是所需,十分感谢,不愧是超级版主。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    145

    主题

    4926

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    9267
    最后登录
    1970-1-1
    发表于 2015-12-28 16:26:37 | 显示全部楼层
    zhjb1 发表于 2015-12-28 16:16
    KL26连续引脚有GPIOD0~7;GPIOC0~11,实际上我可以采用GPIOD的8位和GPIOC的0~7的8位,两个8位就能构成1个16 ...

    你现在这样配置,是哪些引脚不能够翻转?
    把具体的PORT口引脚列出来,我这边测试对比下。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-2-14 16:49
  • 签到天数: 296 天

    连续签到: 1 天

    [LV.8]以坛为家I

    241

    主题

    2239

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    4473
    最后登录
    2020-4-14
     楼主| 发表于 2015-12-28 16:32:56 | 显示全部楼层
    本帖最后由 zhjb1 于 2015-12-28 16:35 编辑

    所有的管脚都不能反转,除了按照GPIO_SET(MKL_PORTD,0)或GPIO_CLR(MKL_PORTD,0)可以反转,直接送数据:dat=0x55;dat=0xAA不行,无反应。
    这样送数的目的是测试I/O口,我有两两反接的LED,插在01,23,45,67口上用反转数据直接看到结果。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    145

    主题

    4926

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    9267
    最后登录
    1970-1-1
    发表于 2015-12-28 16:40:31 | 显示全部楼层
    zhjb1 发表于 2015-12-28 16:32
    所有的管脚都不能反转,除了按照GPIO_SET(MKL_PORTD,0)或GPIO_CLR(MKL_PORTD,0)可以反转,直接送数据:da ...

    你把你工程上传,我看看。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-2-14 16:49
  • 签到天数: 296 天

    连续签到: 1 天

    [LV.8]以坛为家I

    241

    主题

    2239

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    4473
    最后登录
    2020-4-14
     楼主| 发表于 2015-12-28 16:57:56 | 显示全部楼层
    本帖最后由 zhjb1 于 2015-12-28 17:00 编辑
    1. #include "includes.h"

    2. #define GPIO_PIN_MASK 0xFFFFu//0F=15
    3. #define GPIO_PIN(x)(((1)<<(x & GPIO_PIN_MASK)))
    4. #define datc GPIOC_PDDR//8bits Data
    5. #define datd GPIOD_PDDR//12bits Data

    6. void myDelay (INT32U ulTime){
    7. INT32U i;
    8. i = 0;
    9. while(ulTime--){for (i = 0; i < 5000; i++);}
    10. }
    11. //I/O Initial
    12. void ioInit(void){
    13. /*PORT_ENABLE_CLK(MKL_PORTB);//使能PORT时钟
    14. PORT_ENABLE_CLK(MKL_PORTD);
    15. PORT_ENABLE_CLK(MKL_PORTC);

    16. IO_FUN_SEL(MKL_PORTB,18,1);//IO功能选择
    17. IO_FUN_SEL(MKL_PORTB,19,1);
    18. IO_FUN_SEL(MKL_PORTD,0,1);
    19. IO_FUN_SEL(MKL_PORTD,1,1);
    20. IO_FUN_SEL(MKL_PORTD,2,1);
    21. IO_FUN_SEL(MKL_PORTD,3,1);
    22. IO_FUN_SEL(MKL_PORTD,4,1);
    23. IO_FUN_SEL(MKL_PORTD,5,1);
    24. IO_FUN_SEL(MKL_PORTD,6,1);
    25. IO_FUN_SEL(MKL_PORTD,7,1);
    26. IO_FUN_SEL(MKL_PORTC,0,1);
    27. IO_FUN_SEL(MKL_PORTC,1,1);
    28. IO_FUN_SEL(MKL_PORTC,2,1);
    29. IO_FUN_SEL(MKL_PORTC,3,1);
    30. IO_FUN_SEL(MKL_PORTC,4,1);
    31. IO_FUN_SEL(MKL_PORTC,5,1);
    32. IO_FUN_SEL(MKL_PORTC,6,1);
    33. IO_FUN_SEL(MKL_PORTC,7,1);
    34. IO_FUN_SEL(MKL_PORTC,8,1);
    35. IO_FUN_SEL(MKL_PORTC,9,1);
    36. IO_FUN_SEL(MKL_PORTC,10,1);
    37. IO_FUN_SEL(MKL_PORTC,11,1);*/

    38. /*GPIO_DDR_OUTPUT(MKL_PORTB,18);//IO设置为输出模式
    39. GPIO_DDR_OUTPUT(MKL_PORTB,19);
    40. GPIO_DDR_OUTPUT(MKL_PORTD,0);
    41. GPIO_DDR_OUTPUT(MKL_PORTD,1);
    42. GPIO_DDR_OUTPUT(MKL_PORTD,2);
    43. GPIO_DDR_OUTPUT(MKL_PORTD,3);
    44. GPIO_DDR_OUTPUT(MKL_PORTD,4);
    45. GPIO_DDR_OUTPUT(MKL_PORTD,5);
    46. GPIO_DDR_OUTPUT(MKL_PORTD,6);
    47. GPIO_DDR_OUTPUT(MKL_PORTD,7);
    48. GPIO_DDR_OUTPUT(MKL_PORTC,0);
    49. GPIO_DDR_OUTPUT(MKL_PORTC,1);
    50. GPIO_DDR_OUTPUT(MKL_PORTC,2);
    51. GPIO_DDR_OUTPUT(MKL_PORTC,3);
    52. GPIO_DDR_OUTPUT(MKL_PORTC,4);
    53. GPIO_DDR_OUTPUT(MKL_PORTC,5);
    54. GPIO_DDR_OUTPUT(MKL_PORTC,6);
    55. GPIO_DDR_OUTPUT(MKL_PORTC,7);
    56. GPIO_DDR_OUTPUT(MKL_PORTC,8);
    57. GPIO_DDR_OUTPUT(MKL_PORTC,9);
    58. GPIO_DDR_OUTPUT(MKL_PORTC,10);
    59. GPIO_DDR_OUTPUT(MKL_PORTC,11);*/
    60. GPIO_SET(MKL_PORTB,18);//IO设置为高电平,LED熄灭
    61. GPIO_CLR(MKL_PORTB,19);

    62. PORTC_GPCLR=0xFFFF001F;
    63. GPIOC_PDDR=0x00FF;
    64. PORTD_GPCLR=0xFFFF001F;
    65. GPIOD_PDDR=0x00FF;
    66. PORTB_PCR18=(0|PORT_PCR_MUX(1));
    67. PORTB_PCR19=(0|PORT_PCR_MUX(1));
    68. PORTD_PCR0= (0|PORT_PCR_MUX(1));
    69. PORTC_PCR1= (0|PORT_PCR_MUX(1));
    70. PORTC_PCR2= (0|PORT_PCR_MUX(1));
    71. PORTC_PCR3= (0|PORT_PCR_MUX(1));
    72. PORTC_PCR4= (0|PORT_PCR_MUX(1));
    73. PORTC_PCR5= (0|PORT_PCR_MUX(1));
    74. PORTC_PCR6= (0|PORT_PCR_MUX(1));
    75. PORTC_PCR7= (0|PORT_PCR_MUX(1));
    76. PORTC_PCR8= (0|PORT_PCR_MUX(1));
    77. PORTC_PCR9= (0|PORT_PCR_MUX(1));
    78. PORTC_PCR10=(0|PORT_PCR_MUX(1));
    79. PORTC_PCR11=(0|PORT_PCR_MUX(1));
    80. PORTD_PCR0= (0|PORT_PCR_MUX(1));
    81. PORTD_PCR1= (0|PORT_PCR_MUX(1));
    82. PORTD_PCR2= (0|PORT_PCR_MUX(1));
    83. PORTD_PCR3= (0|PORT_PCR_MUX(1));
    84. PORTD_PCR4= (0|PORT_PCR_MUX(1));
    85. PORTD_PCR5= (0|PORT_PCR_MUX(1));
    86. PORTD_PCR6= (0|PORT_PCR_MUX(1));
    87. PORTD_PCR7= (0|PORT_PCR_MUX(1));
    88. GPIOB_PDDR=GPIO_PDDR_PDD(GPIO_PIN(18)|GPIO_PIN(19));
    89. GPIOC_PDDR=GPIO_PDDR_PDD(GPIO_PIN(0)|GPIO_PIN(1)|GPIO_PIN(2)|GPIO_PIN(3)|GPIO_PIN(4)|GPIO_PIN(5)|GPIO_PIN(6)|GPIO_PIN(7)|GPIO_PIN(8)|GPIO_PIN(9)|GPIO_PIN(10)|GPIO_PIN(11));
    90. GPIOD_PDDR=GPIO_PDDR_PDD(GPIO_PIN(0)|GPIO_PIN(1)|GPIO_PIN(2)|GPIO_PIN(3)|GPIO_PIN(4)|GPIO_PIN(5)|GPIO_PIN(6)|GPIO_PIN(7));
    91. }
    92. //Main Program
    93. int  main (void){
    94. 、、INT16U j;
    95. ioInit();
    96. SystemCoreClockUpdate();
    97. SIM_SCGC5 |= (SIM_SCGC5_PORTA_MASK|SIM_SCGC5_PORTB_MASK|SIM_SCGC5_PORTC_MASK|SIM_SCGC5_PORTD_MASK|SIM_SCGC5_PORTE_MASK);
    98. //uart0Init(9600,0,0,8,1);
    99. //printf("YL-KL25Z128 GPIO_Blinky Test start\r\n");
    100. while(1){
    101.   datc=0x0AAA;
    102.   datd=0x0055;
    103.   GPIO_TOGGLE(MKL_PORTB,18);
    104.   GPIO_TOGGLE(MKL_PORTB,19);
    105.   myDelay(1000);
    106.   datc=0x0555;
    107.   datd=0x0AAA;
    108.   GPIO_TOGGLE(MKL_PORTB,18);
    109.   GPIO_TOGGLE(MKL_PORTB,19);
    110.   myDelay(1000);
    111. }
    112. }
    复制代码



    以上是main.c
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-2-14 16:49
  • 签到天数: 296 天

    连续签到: 1 天

    [LV.8]以坛为家I

    241

    主题

    2239

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    4473
    最后登录
    2020-4-14
     楼主| 发表于 2015-12-28 17:01:05 | 显示全部楼层
    main下边的、、是注释//
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-23 20:18 , Processed in 0.106239 second(s), 29 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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