查看: 2230|回复: 6

[求助] 关于寄存器设置问题

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

    连续签到: 1 天

    [LV.8]以坛为家I

    241

    主题

    2239

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    4473
    最后登录
    2020-4-14
    发表于 2016-1-19 06:42:43 | 显示全部楼层 |阅读模式
    题:在SX128中,寄存器可以直接设置立即运用。在KL26中是否可以?具体点是:
    例如:手册KL26P121M48SF4RM.pdf,中39.2.3 UART Control Register 1 (UARTx_C1)说的UARTx_C1寄存器,下有一句话:Address: Base address + 2h offset——基址+偏移2H。在实际操作中是将0x4006A000u这个地址+2H=0x4006A002u呢还是直接将设置的内容采用与&,或|的方式改写其中的数值,比如UART Control Register 1 (UARTx_C1),想改写第7位,UART0_C1 |=0x80;或者直接写数据到0x4006A002——但这个地址描述的是32位宽的数据,如果2H表示的是32位数据向上偏移2H,可以理解成0b00000000,x0000000,00000000,00000000,x是要改写的位置。
    现在在这个问题上有点不太明白,求指点。
    先谢谢了。
    我知道答案 目前已有6人回答
    回复

    使用道具 举报

    该用户从未签到

    124

    主题

    3600

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5781
    最后登录
    1970-1-1
    发表于 2016-1-19 10:45:43 | 显示全部楼层
    直接对寄存器名字进行操作,device的头文件已经把寄存器跟地址映射完成了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2016-1-19 10:50:55 | 显示全部楼层
    和其他的一样,直接用寄存器名称,这个在.H中有定义。SX系列的也是将寄存器地址映射过的。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.8]以坛为家I

    241

    主题

    2239

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    4473
    最后登录
    2020-4-14
     楼主| 发表于 2016-1-19 16:27:46 | 显示全部楼层
    谢谢,如果不需要考虑手册的偏移地址,那就很好用了。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2020-6-22 15:24
  • 签到天数: 79 天

    连续签到: 1 天

    [LV.6]常住居民II

    11

    主题

    509

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1565
    最后登录
    2020-6-22
    发表于 2016-1-21 16:33:18 | 显示全部楼层
    楼主你好
         能发一个KL26ZTPM模块中断例子
         作为定时器用
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.8]以坛为家I

    241

    主题

    2239

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    4473
    最后登录
    2020-4-14
     楼主| 发表于 2016-1-21 16:45:45 | 显示全部楼层
    fjlmnb456 发表于 2016-1-21 16:33
    楼主你好
         能发一个KL26ZTPM模块中断例子
         作为定时器用

    Sorry,Freescale的芯片还没有做过用Timer作定时器的实验。但M051的有用Timer1做的任意延时定时器【给定时数据,完成后中断返回参数的】,无法参考。寄存器完全不一样。
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.8]以坛为家I

    241

    主题

    2239

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    4473
    最后登录
    2020-4-14
     楼主| 发表于 2016-1-25 16:34:59 | 显示全部楼层
    还是关于寄存器设置问题。UART0共有UART0_BDH~BDL2个波特率除数因子寄存器,UART0_C1~C55个控制寄存器,OART0_S1~S22两个状态寄存器,UART0_MA1~MA22个地址标示寄存器。如果仅仅用来控制UART0的发送和输出,只需要设置UART0_C1、C2和监测S1就够了——这是我看手册的理解。
    实验是这样进行的:
    先采用其MKL_UART.c中的UART0_INIT初始化程序将波特率设置好,而后采用寄存器来设置UART0的RX和TX。
    在UART0_C1中设置全双工独立引脚、无等待、不循环、8位、空闲位=0、不唤醒:0B01000000=0x40
    在UART0_C2中设置不中断、传输完成中断、接收中断禁用、空闲中断禁用、TX禁止[接收时]、RX允许[发送时禁止]、普通唤醒、正常队列。接收时:0B00000100=0x04||发送时:0B00001000=0x08;
    实验在打开UART0之后先接受大约501个字节才开始进入程序循环,但无论怎样改变C1和C2收发总在自动进行,并且无论采用Uart0GetChar()、或中间变量temp=Uart0GetChar()、或还是直接独处UART0_D获得的数据永远是0x20。
    问题不是这个,看手册找不到设置这些寄存器的方法,比如开通某某模块,其流程:先设置模块的时钟、选定时钟、设置基本参数1、...、参数N、开中断->接入程序,收到数据后,先关中断,处理数据,再开中断,接收数据...循环直到结束,关中断,关时钟,退回到原始状态。手册中没有这种流程,确实是在摸着石头过河,还老过不去。
    我想做程序的,流程就是程序员的语言,有了流程什么都水到渠成,给一段代码针对不同使用者几乎没有什么帮助,但有一个流程则就如鱼得水了,不是吗?
    在这一点上,Nunoton的M0或M4手册就比较写的好点,都有流程宣示此模块的运行。求解UART寄存器设置流程,为什么我得到的全是0x20?
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-23 04:55 , Processed in 0.093200 second(s), 27 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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