打印
[技术问答]

【ML51超低功耗应用】Timer0_Delay低频LIRC下无法使用问题

[复制链接]
614|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dqqqqqq|  楼主 | 2020-5-6 10:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

Timer0_Delay(38400,1,1000); 定时器零在38.4Khz主频下延时1毫秒,是这样吗?有详细的中文库函数说明吗?

ML51_BSP_C51_V1.00\SampleCode\StdDriver\UART2例程中无法使用,注释掉 //Timer0_Delay(38400,1,1000); UART2就可以发送了

代码如下:
     MFP_P21_UART2_TXD;
    P21_QUASI_MODE;

          set_SC0CR0_SCEN;         /* Enable SC module */
          set_SC0CR1_UARTEN;       /* set as UART mode */
          set_SC0CR1_CLKKEEP;      
          clr_SC0CR0_CONSEL;       /* clr CONSEL and AUTOCEN*/
          clr_SC0CR0_AUTOCEN;
          SC0ETURD0 = 0x07;        /* define baud rate low byte */
          SC0ETURD1 = 0x00;        /* define baud rate high byte */

          set_SC0CR1_PBOFF;     //parity bit disable
          SC0CR1&=0XCF;        //datalegth 8bit
          set_SC0CR0_NSB;      //stop bit = 1bit

    //下列几行代码什么含义?
    SFRS =1;
    TA=0xAA;
    TA=0x55;
    LVRDIS = 0x5A;
    TA=0xAA;
    TA=0x55;
    LVRDIS = 0xA5;
    TA=0xAA;
    TA=0x55;
    PORDIS = 0x5A;
    TA=0xAA;
    TA=0x55;
    PORDIS = 0xA5;

    FsysSelect(FSYS_LIRC);
    set_PCON_LPR;   
    while(1)
    {
      UART_Send_Data(UART2,0x50);  
      //Timer0_Delay(38400,1,1000);
    }

使用特权

评论回复
沙发
奔跑的牛| | 2020-5-6 10:36 | 只看该作者
Timer0_Delay(38400,1,1000);
需要选择高速时钟.

使用特权

评论回复
板凳
gejigeji521| | 2020-5-6 10:56 | 只看该作者
第一个参数是什么意思?楼主没搞懂

使用特权

评论回复
地板
huangcunxiake| | 2020-5-6 18:57 | 只看该作者
没法使用那个时钟,要看说明。

使用特权

评论回复
5
wanduzi| | 2020-5-6 19:49 | 只看该作者
要看这个函数实现是用的哪个定时器。

使用特权

评论回复
6
wanduzi| | 2020-5-6 19:58 | 只看该作者
/**
  * @brief Timer0 delay setting
  * @param[in] u32SYSCLK define Fsys clock value. for example 24000000, use the real Fsys value.
  *                       - \ref 24000000 (use HIRC)
  *                       - \ref 22118400 (use HXT)
  * @param[in] u8CNT define count time.
  * @param[in] u6DLYUnit define delay time base is us. From 1~10000, the maxima value please not over 10000.
  *                       - \ref 1000 (1ms)
  *                       - \ref 100 (100us)
  * @return  None
  * @NOTE    If use LIRC or LXT as Fsys need adjust this marco.
  * @exmaple :  Timer0_Delay(24000000,5,1000);
*/
void Timer0_Delay(unsigned long u32SYSCLK, unsigned int u16CNT, unsigned int u16DLYUnit)

使用特权

评论回复
7
wanduzi| | 2020-5-6 19:59 | 只看该作者
意思是,如果你要用LICR,你需要适配这个宏。要自己实现。

使用特权

评论回复
8
wahahaheihei| | 2020-5-7 19:21 | 只看该作者
一般人不会使用这个比较慢的的定时器实现精度较高的定时,所以官方没有提供。因为速度相差太多,没法统一。

使用特权

评论回复
9
huahuagg| | 2020-5-10 17:27 | 只看该作者
太慢的时钟,你根本定时不了这个1us,1ms

使用特权

评论回复
10
huahuagg| | 2020-5-10 17:28 | 只看该作者
所以官方没有提供这个库,也不建议自己实现,有实现那个功夫其实for循环跑空指令也可以满足你需求了。

使用特权

评论回复
11
xuanhuanzi| | 2020-5-10 17:51 | 只看该作者
以前51都没提供库函数,提供了不容易了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

24

主题

90

帖子

0

粉丝