PROFIBUS DP从站开发 VPC3源程序分析---vpc3_cfg_data_update(void)

//
/// 以下程序注释由成都地质学院霸王猫添加,引用时请尊重作者劳动成果,标明引用者来自成都地质学院霸王猫。
//

UBYTE vpc3_cfg_data_update(void)


  入口参数:
         无

    出口参数:
        无

    返回值:
            VPC3_CFG_FINISHED/VPC3_CFG_CONFLICT

    调用格式:
        #define VPC3_SET_CFG_DATA_UPDATE()   vpc3_cfg_data_update()
        dp_sys.vpc3_con = VPC3_SET_CFG_DATA_UPDATE();

    函数功能:
        
        更新配置数据,确认CHK-CFG中断。
                

    源程序:

/*---------------------------------------------------------------------------*/
/*                                                                           */
/*  UBYTE vpc3_cfg_data_update(void)                                         */
/*                                                                           */
/*  function:      Update Configuration Data                                 */
/*                                                                           */
/*  parameter:     none                                                      */
/*  return value:  VPC3_CFG_FINISHED:  The transferred configuration is OK.  */
/*                 VPC3_CFG_CONFLICT:  Repeat verification of the requested  */
/*                                     configuration.                        */
/*                                                                           */
/*---------------------------------------------------------------------------*/
UBYTE vpc3_cfg_data_update(void)
{
    vpc3->len_read_cfg_data = vpc3->len_cfg_data;
    memcpy( VPC3_GET_READ_CFG_BUF_PTR(), VPC3_GET_CFG_BUF_PTR(), vpc3->len_cfg_data);
    return (vpc3->ctrl_reg.rd.user_cfg_data_ok);
}


//-------------------------------------------------------------------------------------
1. 执行下面语句 
//-------------------------------------------------------------------------------------
   vpc3->len_read_cfg_data = vpc3->len_cfg_data;


已知:
    (1)、vpc3->len_cfg_data = 配置缓冲器长度(寄存器地址31H)


目的:
    配置缓冲器长度拷贝到“读配置缓冲器长度”


结果:
    vpc3->len_read_cfg_data(寄存器地址33H) = 配置缓冲器长度

//-------------------------------------------------------------------------------------
2. 执行下面语句 
//-------------------------------------------------------------------------------------
    memcpy( VPC3_GET_READ_CFG_BUF_PTR(), VPC3_GET_CFG_BUF_PTR(), vpc3->len_cfg_data);

已知:
    (1)、vpc3->len_cfg_data = 配置缓冲器长度(寄存器地址31H)
    (2)、VPC3_GET_CFG_BUF_PTR() = 调用宏读取“配置缓冲器”段基址
    (3)、VPC3_GET_READ_CFG_BUF_PTR() = 调用宏读取“读配置缓冲器”段基址

目的:
    配置数据从“配置缓冲器”段基址指定的地址拷贝“vpc3->len_cfg_data”指定的长度到“读配置缓冲器指定的地址”空间。


结果:
    数据拷贝完成。


//-------------------------------------------------------------------------------------
3. 执行下面语句 
//-------------------------------------------------------------------------------------
    return (vpc3->ctrl_reg.rd.user_cfg_data_ok);


原理:
    vpc3_cfg_data_update()函数是在中断服务程序中调用的。
        New_Prm_Data, New_Cfg_Data这两个中断不能通过写IAR来响应中断。这两个状态机通过用户应答(如User_Prm_Data_Okay等)来清除中断。


目的:
    用户肯定的响应CHK-CFG报文,清除New_Cfg_Data中断位。


结果:
    中断确认寄存器中的CHK-CFG中断位清除。
    
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值