pm8001驱动内核代码分析(二)学习驱动第一步先看对象成员

学习心得:第一步看该驱动所有头文件,学习对象成员结构体。看看内核源码是怎么设计的,我们举一反三,自我学习并运用于自己写的的内核代码驱动中。

1.pm8001驱动相关对象

(1)相关头文件,所涉及的对象和枚举

/drivers/scsi/pm8001/pm8001_hwi.h
/drivers/scsi/pm8001/pm8001_defs.h
/drivers/scsi/pm8001/pm80xx_hwi.h
/drivers/scsi/pm8001/pm8001_sas.h

/drivers/scsi/pm8001/pm8001_hwi.h

@||-   struct
@|||     mpi_msg_hdr
@|||     phy_start_req
@|||     phy_stop_req
@|||     set_dev_bits_fis
@|||     pio_setup_fis
@|||     sata_completion_resp
@|||     hw_event_resp
@|||     reg_dev_req
@|||     dereg_dev_req
@|||     dev_reg_resp
@|||     local_phy_ctl_req
@|||     local_phy_ctl_resp
@|||     port_ctl_req
@|||     hw_event_ack_req
@|||     ssp_completion_resp
@|||     sata_event_resp
@|||     ssp_event_resp
@|||     general_event_resp
@|||     smp_req
@|||     smp_completion_resp
@|||     task_abort_req
@|||     task_abort_resp
@|||     sas_diag_start_end_req
@|||     sas_diag_execute_req
@|||     set_dev_state_req
@|||     sas_re_initialization_req
@|||     sata_start_req
@|||     ssp_ini_tm_start_req
@|||     ssp_info_unit
@|||     ssp_ini_io_start_req
@|||     fw_flash_Update_req
@|||     fw_flash_Update_resp
@|||     get_nvm_data_req
@|||     set_nvm_data_req
@|||     get_nvm_data_resp
@|||     sas_diag_start_end_resp
@|||     sas_diag_execute_resp
@|||     set_dev_state_resp


/drivers/scsi/pm8001/pm80xx_hwi.h

@||-   struct
@|||     mpi_msg_hdr
@|||     phy_start_req
@|||     phy_stop_req
@|||     set_dev_bits_fis
@|||     pio_setup_fis
@|||     sata_completion_resp
@|||     hw_event_resp
@|||     thermal_hw_event
@|||     reg_dev_req
@|||     dereg_dev_req
@|||     dev_reg_resp
@|||     local_phy_ctl_req
@|||     local_phy_ctl_resp
@|||     port_ctl_req
@|||     hw_event_ack_req
@|||     phy_start_resp
@|||     phy_stop_resp
@|||     ssp_completion_resp
@|||     sata_event_resp
@|||     ssp_event_resp
@|||     general_event_resp
@|||     smp_req
@|||     smp_completion_resp
@|||     task_abort_req
@|||     task_abort_resp
@|||     sas_diag_start_end_req
@|||     sas_diag_execute_req
@|||     set_dev_state_req
@|||     sata_start_req
@|||     ssp_ini_tm_start_req
@|||     ssp_info_unit
@|||     ssp_ini_io_start_req
@|||     ssp_dif_enc_io_req
@|||     fw_flash_Update_req
@|||     fw_flash_Update_resp
@|||     get_nvm_data_req
@|||     set_nvm_data_req
@|||     set_ctrl_cfg_req
@|||     get_ctrl_cfg_req
@|||     kek_mgmt_req
@|||     dek_mgmt_req
@|||     set_phy_profile_req
@|||     get_phy_profile_req
@|||     ext_flash_partition_req
@|||     get_nvm_data_resp
@|||     sas_diag_start_end_resp
@|||     sas_diag_execute_resp
@|||     set_dev_state_resp
@|||     set_ctrl_cfg_resp
@|||     get_ctrl_cfg_resp
@|||     kek_mgmt_resp
@|||     dek_mgmt_resp
@|||     get_phy_profile_resp
@|||     flash_op_ext_resp
@|||     set_phy_profile_resp
@|||     ssp_coalesced_comp_resp
@|||     SASProtocolTimerConfig

/drivers/scsi/pm8001/pm8001_defs.h

@||-   enum
@|||     chip_flavors
@|||     phy_speed
@|||     data_direction
@|||     port_type
@|||     memory_region_num
@|||     mpi_err
@|||     phy_control_type
@|||     pm8001_hba_info_flags

/drivers/scsi/pm8001/pm8001_sas.h

@||-   struct
@|||     pm8001_tmf_task
@|||     pm8001_ioctl_payload
@|||     pm8001_dispatch
@|||     pm8001_chip_info
@|||     pm8001_port
@|||     pm8001_phy
@|||     pm8001_device
@|||     pm8001_prd_imt
@|||     pm8001_prd
@|||     pm8001_ccb_info
@|||     mpi_mem  
@|||     mpi_mem_req
@|||     encrypt  
@|||     sas_phy_attribute_table
@|||     inbound_queue_table
@|||     outbound_queue_table
@|||     pm8001_hba_memspace
@|||     pm8001_hba_info
@|||     pm8001_work
@|||     pm8001_fw_image_header
@|||     fw_flash_updata_info
@|||     fw_control_info
@|||     fw_control_ex

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
您好!对于TM4C123GH6PM驱动直流电机的代码,您可以使用TM4C系列微控制器提供的GPIO模块来控制电机的引脚。以下是一个简单的示例代码,演示如何使用TM4C123GH6PM驱动直流电机: ```c #include <stdint.h> #include "tm4c123gh6pm.h" #define MOTOR_PIN1 GPIO_PIN_0 // 设置电机引脚1 #define MOTOR_PIN2 GPIO_PIN_1 // 设置电机引脚2 void motor_init(void) { SYSCTL_RCGCGPIO_R |= SYSCTL_RCGCGPIO_R5; // 使能GPIO Port F时钟 GPIO_PORTF_DIR_R |= MOTOR_PIN1 | MOTOR_PIN2; // 设置引脚为输出模式 GPIO_PORTF_DEN_R |= MOTOR_PIN1 | MOTOR_PIN2; // 使能数字功能 } void motor_forward(void) { GPIO_PORTF_DATA_R |= MOTOR_PIN1; // 设置引脚1为高电平 GPIO_PORTF_DATA_R &= ~MOTOR_PIN2; // 设置引脚2为低电平 } void motor_backward(void) { GPIO_PORTF_DATA_R &= ~MOTOR_PIN1; // 设置引脚1为低电平 GPIO_PORTF_DATA_R |= MOTOR_PIN2; // 设置引脚2为高电平 } void motor_stop(void) { GPIO_PORTF_DATA_R &= ~(MOTOR_PIN1 | MOTOR_PIN2); // 设置引脚1和引脚2为低电平 } int main(void) { motor_init(); // 初始化电机 while (1) { motor_forward(); // 向前运动 // 可以在此处添加延时,控制电机运行时间 motor_stop(); // 停止电机 // 可以在此处添加延时,控制电机停止时间 motor_backward(); // 向后运动 // 可以在此处添加延时,控制电机运行时间 motor_stop(); // 停止电机 // 可以在此处添加延时,控制电机停止时间 } } ``` 请注意,以上代码仅为示例,您需要根据实际的硬件连接和需求进行相应的修改。另外,您可能还需要配置时钟和中断等相关设置,以使代码能够正常运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Linux技术芯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值