simulink创建数字量输出底层驱动的tlc文件介绍

这个文件主要的作用在我看来就是为了设置根据simulink的模型的配置,设置对应的底层寄存器,就是你模型的可视化设置和真正的底层c语言的驱动联系起来
%implements s12x_dio_out “C”
//上面这一行必须和.c的文件名一致
//一般的tlc文件都会有两个函数,一个是Start(block, system) Output,一个是 Outputs(block, system) Output
//Start(block, system) Output这个函数生成的代码是放在模型的初始化函数里面, Outputs(block, system) Output这个函数生成的代码是放在模型的执行函数(step())里面
%function Start(block, system) Output

%assign port = getPort(SFcnParamSettings.DIOPort)

**//获得C函数里面端口的定义,因为这个参数选择的是popup模式,你输入A会显示0,但是我们实际想需要的还是A 所以需要通过这个函数将0转换成A**

%assign bit = CAST( "Number",SFcnParamSettings.Bit)-1
**//这里设置的是-1是因为模型里面Bit位给的是1开始的,获取引脚位数**
%assign value = getValue(SFcnParamSettings.Value)
**//获得端口的值**
%switch port
%case "A"
DDR%<port>_DDR%<port>%<bit> = 1;   
PORT%<port>_P%<port>%<bit> =%<value>; **//这里是根据模型的选择,设置对应的寄存器的值**
 %break 
%case "B"
DDR%<port>_DDR%<port>%<bit> = 1;   
PORT%<port>_P%<port>%<bit> =%<value>; 
 %break    
%case "E"
DDR%<port>_DDR%<port>%<bit> = 1;   
PORT%<port>_P%<port>%<bit> =%<value>; 
 %break    
%case "H"
DDR%<port>_DDR%<port>%<bit> = 1;   
PT%<port>_PT%<port>%<bit> =%<value>; 
 %break      
%case "J"
DDR%<port>_DDR%<port>%<bit> = 1;   
PT%<port>_PT%<port>%<bit> =%<value>; 
 %break   
%case "K"
DDR%<port>_DDR%<port>%<bit> = 1;   
PORT%<port>_P%<port>%<bit> =%<value>; 
 %break    
%case "M"
DDR%<port>_DDR%<port>%<bit> = 1;   
PT%<port>_PT%<port>%<bit> =%<value>; 
 %break   
%case "P"
DDR%<port>_DDR%<port>%<bit> = 1;   
PT%<port>_PT%<port>%<bit> =%<value>; 
 %break   
%case "R"
DDR%<port>_DDR%<port>%<bit> = 1;   
PT%<port>_PT%<port>%<bit> =%<value>; 
 %break   
%case "S"
DDR%<port>_DDR%<port>%<bit> = 1;   
PT%<port>_PT%<port>%<bit> =%<value>; 
 %break   
%case "T"
DDR%<port>_DDR%<port>%<bit> = 1;   
PT%<port>_PT%<port>%<bit> =%<value>; 
 %break      

%default
%endswitch
%endfunction

%function Outputs(block, system) Output

%assign port = getPort(SFcnParamSettings.DIOPort)
%assign bit = CAST( "Number",SFcnParamSettings.Bit)-1
%assign u0 = LibBlockInputSignal(0, "", "", 0)
**//u0是为了获取信号的输入值**

%switch port
%case “A”
PORT%_P%% =%;
%break
%case “B”
PORT%_P%% =%;
%break
%case “E”
PORT%_P%% =%;
%break
%case “H”
PT%_PT%% =%;
%break
%case “J”
PT%_PT%% =%;
%break
%case “K”
PORT%_P%% =%;
%break
%case “M”
PT%_PT%% =%;
%break
%case “P”
PT%_PT%% =%;
%break
%case “R”
PT%_PT%% =%;
%break
%case “S”
PT%_PT%% =%;
%break
%case “T”
PT%_PT%% =%;
%break
%default
%endswitch
%endfunction

%function getPort(portNum) Output

%if ISEQUAL(portNum, 1)
%return “A”
%elseif ISEQUAL(portNum, 2)
%return “B”
%elseif ISEQUAL(portNum, 3)
%return “E”
%elseif ISEQUAL(portNum, 4)
%return “H”
%elseif ISEQUAL(portNum, 5)
%return “J”
%elseif ISEQUAL(portNum, 6)
%return “K”
%elseif ISEQUAL(portNum, 7)
%return “M”
%elseif ISEQUAL(portNum, 8)
%return “P”
%elseif ISEQUAL(portNum, 9)
%return “R”
%elseif ISEQUAL(portNum, 10)
%return “S”
%elseif ISEQUAL(portNum, 11)
%return “T”
%endif
%endfunction

%function getValue(value) Output
%if ISEQUAL(value, 1)
%return “0”
%elseif ISEQUAL(value, 2)
%return “1”
%endif
%endfunction

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值