学习MPC5748g

GPIO

/* pin PA[10] - USER LED3 (DS4) on DEV-KIT */
#define PORT PTA
#define LED3    10

PTA在定义在 MPC5748G_features.h 文件中,如下源码
PTA:选中了PA这一组IO口的首地址,选择PTA组的不同pin口时直接对相应位的寄存器置1或者0即可
LED_PIN 10:在开发板DEV-KIT中LED3(DS4)为 pin PA[10]

// 以下列出的是 MPC5748G_features.h 官方提供部分源码
/* GPIO - Peripheral instance base addresses */
/** Peripheral PTA base address */
#define PTA_BASE                                 (0xFFFC1700u)
/** Peripheral PTA base pointer */
#define PTA                                      ((GPIO_Type *)PTA_BASE)
/** Peripheral PTB base address */
#define PTB_BASE                                 (0xFFFC1702u)
/** Peripheral PTB base pointer */
#define PTB                                      ((GPIO_Type *)PTB_BASE)
……
……
#define PTP_BASE                                 (0xFFFC171Eu)
/** Peripheral PTP base pointer */
#define PTP                                      ((GPIO_Type *)PTP_BASE)
/** Peripheral PTQ base address */
#define PTQ_BASE                                 (0xFFFC1720u)
/** Peripheral PTQ base pointer */
#define PTQ                                      ((GPIO_Type *)PTQ_BASE)

GPIO的设置方法:

//	0:ON	1:OFF
PINS_DRV_TogglePins(PORT, (0 << LED3 ));
PINS_DRV_TogglePins(PORT, (1 << LED3 ));

PINS_DRV_WritePin(PORT, LED3 , 0);	
PINS_DRV_WritePin(PORT, LED3 , 1);	

PINS_DRV_WritePins(PORT, (0 << LED3 ));
PINS_DRV_WritePins(PORT, (1 << LED3 ));	

PINS_DRV_SetPins(PORT, (0 << LED3 ));	
PINS_DRV_SetPins(PORT, (1 << LED3 ));	


//在给定的结构中,这个函数用提供的选项配置引脚
status_t PINS_DRV_Init(uint32_t pinCount, const pin_settings_config_t config[])

// 此功能可配置参数引脚中列出的输出引脚(*'1')的值为'set'(HIGH)
void PINS_DRV_SetPins(GPIO_Type * const base, pins_channel_type_t pins)

CLOCK_SYS_Init

/*FUNCTION**********************************************************************
 *
 * Function Name : CLOCK_SYS_Init
 * Description   : Install pre-defined clock configurations.
 * This function installs the pre-defined clock configuration table to the
 * clock manager.
 *
 * Implements CLOCK_SYS_Init_Activity
 *END**************************************************************************/
status_t CLOCK_SYS_Init(clock_manager_user_config_t const **clockConfigsPtr,
                              uint8_t configsNumber,
                              clock_manager_callback_user_config_t **callbacksPtr,
                              uint8_t callbacksNumber)
{
    DEV_ASSERT(clockConfigsPtr != NULL);
    DEV_ASSERT(callbacksPtr != NULL);

    g_clockState.configTable     = clockConfigsPtr;	//指针指向时钟配置表
    g_clockState.clockConfigNum  = configsNumber;	//时钟配置数
    g_clockState.callbackConfig  = callbacksPtr;	//指针指向回调函数表
    g_clockState.callbackNum     = callbacksNumber;	//时钟回调的数目

	//errorCallbackIndex是返回错误的回调的索引在时钟模式切换期间。
	//如果所有回调均返回成功,则errorCallbackIndex是callbacksNumber。   
    g_clockState.errorCallbackIndex = callbacksNumber;	//返回错误的回调的索引

    return STATUS_SUCCESS;
}

Timer

/*
the final value of counter (only FTM)
此函数初始化时钟源、定时器实例的预估程序(LPIT、PIT除外)、最终计数器的值(仅FTM)。
该函数还可以设置定时通道的通知类型和回调函数。
定时器实例号及其配置结构作为参数传递。
调用此函数后,计时器通道默认不开始计数。
必须调用TIMING_StartChannel函数来启动计时器通道计数。
*/
status_t TIMING_Init(const timing_instance_t * const instance,
                     const timer_config_t * const config)

//	此函数以工程单位(纳秒、微秒或毫秒)获取刻度分辨率。
//	此函数的结果用于计算周期、剩余时间或工程单元的运行时间。
status_t TIMING_GetResolution(const timing_instance_t * const instance,
                              const timer_resolution_type_t type,
                              uint64_t * const resolution)
 
//该函数以一个新的周期(以刻度为单位)开始通道计数。
void TIMING_StartChannel(const timing_instance_t * const instance,
                         const uint8_t channel,
                         const uint32_t periodTicks)

LinFlexD
介绍:

  • LINFlexD控制器的设计目的是:用最少的CPU负载有效地管理大量LIN消息。为了减少主模式下的CPU负载,LINFlexD在软件触发报头传输时自动处理LIN消息,直到下一个报头传输请求处于发送模式,或者直到校验和接收模式。它还包含一个用于传输/接收数据的8字节缓冲区。
  • LINFlexD还支持一些基本的UART传输,包括8位、9位、16位和17位的帧,以及12位数据帧+在UART模式下的校验接收,以支持MSC。LINFlexD在LIN/ UART工作模式下支持多通道和参数化DMA Tx/Rx接口。
  • LINFlexD支持LIN协议版本1.3、2.0、2.1和2.2。
术语 描述
LIN 本地互联网络
UART 通用异步收发机
ID 标识符字段
DMA 直接存储器存取
TCD 传输控制描述符
IPS 外围总线接口
IRQ 中断请求
FSM 有限状态机
WS 等待状态
SW 软件
CPU 中央处理机
SoC 片上系统
PAL 特别访问级别

主要特点:
LINFlexD控制器可以在多种模式下运行,每种模式都有一组不同的特性,这些特性将在下面的部分中描述。此外,LINFlexD控制器有几个所有模式的共同特点:
分数波特率发生器

  • 3种省电和配置寄存器锁定的工作模式
    • 初始化
    • 正常
    • 睡眠
  • 测试模式:循环返回
  • 可屏蔽中断
  • 最多可以在标识符列表中编程16个可能的标识符

LIN 模式主要特点:

  • 支持LIN协议版本1.3、2.0、2.1和2.2
  • 最高可达20kbit /s的比特率(LIN协议)
  • 主/从模式
  • 经典和增强的校验和计算和校验
  • 用于传输/接收的单个8字节缓冲区或FIFO
  • 超时管理
  • 标识符过滤器
  • DMA接口
  • 支持最多16个可能的标识符
  • 具有自主消息处理的主模式
  • 主导位检测的唤醒事件
  • 真正的现场状态机
  • 高级LIN错误检测
  • 标头,响应和帧超时
  • 从机模式
  • 自治标头处理
  • 自主发送/接收数据处理
  • 标识符过滤器,用于在从站模式下自主处理消息
  • 用于计算波特率的单独时钟
  • 保持“(2/3)* LIN_CLK > PBRIDGEx_CLK > 1/3*LIN_CLK”的关系

UART 模式主要特点:

  • 全双工通信
  • 波特率是波特时钟,LINIBRR和LINFBRR寄存器的函数
  • 用于计算波特率的单独时钟
  • 关系“(2/3)* LIN_CLK> PBRIDGEx_CLK> 1/3 * LIN_CLK”应该保持。
  • 15/16/7/8位数据,奇偶校验
  • 1/2/3个停止位
  • 12位+奇偶校验接收
  • 4字节缓冲区用于接收,4字节缓冲区用于发送
  • 用于超时管理的12位计数器
  • 可达到的最大波特率是LIN_CLK / 4 Mbit / s。
  • 对于比特率≤LIN_CLK / 16 Mbit / s
    • 十六倍过采样
    • 3:1多数决
  • 对于LIN_CLK / 16 Mbit / s <比特率≤LIN_CLK / 8 Mbit / s

CAN

typedef struct {
     bool enableFD; 	/ *<启用灵活的数据速率* /
     bool enableBRS; 	/ *<启用CAN FD框架内的比特率切换* /
     uint8_t fdPadding; / *<数据长度代码(DLC)时用于填充的值
                                      指定的有效负载大小大于实际数据长度* /
     can_msg_id_type_t idType; / *<指定帧格式是标准格式还是扩展格式* /
     bool isRemote; 	/ *<指定框架是标准框架还是远程框架* /
} can_buff_config_t;

你可能感兴趣的:(学习MPC5748g)