2409|1

527

帖子

0

TA的资源

五彩晶圆(中级)

楼主
 

MSP430F4152闲聊 [复制链接]

1. 近期弄了下F4152, 开始是弄个串口打印,还算顺利,遇到个现象就是串口接收中断和发送中断(作为一个),以及总中断(作为另一个),二者只能有一个使能,若都使能,串口功能异常,尝试了几次,都一样,有小伙伴解释下吗
2. 弄通了Basic Timer以及片内的RTC,BT要设置成16位计数器模式,即让BTCNT1和BTCNT2级联,再设置RTC为日历模式,写入时间后,可读出日历在走了。


3. 也玩了下430的睡眠
理解的睡眠机制为,在BT_ISR中给一个固定时间唤醒,比如用BT设定的溢出时间,我这里检查任务,若没有任务了,就睡眠因为是定时(比如1s)唤醒,又因为睡的时间不确定,所以可能出现刚睡就醒的情况,即睡的时间可能满1s,给人感觉是睡了,
可能睡了100ms,此时BT溢出了,就唤醒,即刚睡就醒,给人感觉是没睡


附上BT的初始化和ISR,以及RTC的初始化和获取时间

#pragma vector = BASICTIMER_VECTOR
__interrupt void BT_ISR(void)
{

        P7OUT ^= (1<<4);
        //for bt test.
       
        bt_counter++;
        if(bt_counter >= 6)
        //6s 醒一次
        {
                bt_counter = 0;

                Task = 1; //注意Task定义时需要volatile !!

                LPM3_EXIT;               

        }

       
       
}


void BT_Init(void)
{


        BTCTL |= (1<<5);
        //BTCNT2 Clock source is ACLK/256.
        //configured to be 16-bit counter mode.
       
       
        BTCTL = BT_ADLY_1000; //1000ms
               
       
        IE2 |= (1<<7); //bt enable interrupt
        //Basic Timer进入ISR条件是自身中断使能以及打开总中断。
        //实际测试所得。--2015.11.12 12:38

       
}



void RTC_Init(void)
{


        RTCCTL &= ~(1<<7); //hex format


        RTCCTL &= ~(1<<6); //RTC is operational

       
        RTCCTL |= (1<<5)|(1<<4); //Calender mode

               
       
        //RTCCTL |= (1<<1); //enable RTC interrupt
        //若打开RTC中断,则无法进入BT_ISR了
        //所以这里禁止RTC中断
       

}


void GetTime(void)
{

        union sv_16 temp_union_16;

       
        TRACE("\r\n****** Enter into GetTime() *******\r\n");


        temp_union_16.c[1] = RTCYEARH;
        temp_union_16.c[0] = RTCYEARL;

        dth[YEAR] = temp_union_16.Val % 2000;

        dth[MONTH] = RTCMON;

        dth[DATE] = RTCDAY;

        dth[HOUR] = RTCHOUR;

        dth[MIN] = RTCMIN;

        dth[SEC] = RTCSEC;


        if(debug)
        {
                TRACE("dth[YEAR] = %d\r\n", dth[YEAR]);
                TRACE("dth[MONTH] = %d\r\n", dth[MONTH]);
                TRACE("dth[DATE] = %d\r\n", dth[DATE]);
                TRACE("dth[HOUR] = %d\r\n", dth[HOUR]);
                TRACE("dth[MIN] = %d\r\n", dth[MIN]);
                TRACE("dth[SEC] = %d\r\n", dth[SEC]);
        }
       
       
}

 
点赞 关注

回复
举报

527

帖子

0

TA的资源

五彩晶圆(中级)

沙发
 
还有个事情,无线收发弄个2个64B的buffer,程序编译烧入后,main开始处,很多变量刚赋值后,值就不对了,郁闷了,难道是RAM太小的原因? 收发合用一个buffer,问题解决
有人遇到过吗
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表