Tool/software:
Hi team,
According to the specification sheet, during the falling edge of the PWM_SYNC synchronization signal, the upper bridge HS is closed and the lower bridge LS is open, and the U-phase should be at a low level. Why is the actual waveform collected at a high level? Is it a configuration issue?
Channel 0 is PWM_SYNC, and Channel 1 is the voltage of U relative to ground.
#include "gd32f4xx.h" #include "drv8311.h" #include <string.h> const uint8_t drv8311_reg_addr[21] = { // DRV8311的寄存器的地址 DEV_STS1_ADDR, OT_STS_ADDR, SUP_STS_ADDR, DRV_STS_ADDR, SYS_STS_ADDR, PWM_SYNC_PRD_ADDR, FLT_MODE_ADDR, SYSF_CTRL_ADDR, DRVF_CTRL_ADDR, FLT_TCTRL_ADDR, FLT_CLR_ADDR, PWMG_PERIOD_ADDR, PWMG_A_DUTY_ADDR, PWMG_B_DUTY_ADDR, PWMG_C_DUTY_ADDR, PWM_STATE_ADDR, PWMG_CTRL_ADDR, PWM_CTRL1_ADDR, DRV_CTR_ADDR, CSA_CTRL_ADDR, SYS_CTRL_ADDR}; uint16_t drv8311_reg_val[3][21]; // 3片DRV8311读取到的寄存器的值 uint16_t spi_send_array[5]; // SPI_DMA发送数据 uint16_t spi_recv_array[5]; // SPI_DMA接收数据 uint8_t spi_dma_type[3]; // 3个从站的SPI_DMA操作的类型[读1个][读4个][写1个][写3个] uint8_t spi_dma_reg[3]; // 3个从站的SPI_DMA操作的寄存器的序号[0...20] uint16_t spi_dma_data[3][3]; // 3个从站的SPI_DMA写入的数据值,一次最多写入3个寄存器值 uint8_t spi_dma_chip; // 当前正在进行SPI_DMA通信的DRV8311序号[0][1][2] // DRV8311的控制/状态IO引脚初始化 void drv8311_io_init(void) { rcu_periph_clock_enable(RCU_GPIOA); rcu_periph_clock_enable(RCU_GPIOE); // PE0(nSLEEP1), PE1(nSLEEP2), PE2(nSLEEP3) gpio_mode_set(GPIOE, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2); gpio_output_options_set(GPIOE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2); gpio_bit_set(GPIOE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2); // 拉高nSLEEP退出休眠模式,1ms后才能正常读写DRV8311寄存器 // PE3(nFAULT1), PE4(nFAULT2), PE5(nFAULT3) gpio_mode_set(GPIOE, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5); gpio_output_options_set(GPIOE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5); // PA8(SYNC1), PA9(SYNC2), PA10(SYNC3),由TIMER0_CH0/CH1/CH2控制输出PWM gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10); gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10); gpio_af_set(GPIOA, GPIO_AF_1, GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10); } // DRV8311的SPI引脚初始化,SPI外设初始化,DMA初始化 void drv8311_comm_init(void) { rcu_periph_clock_enable(RCU_GPIOA); rcu_periph_clock_enable(RCU_GPIOB); rcu_periph_clock_enable(RCU_DMA1); rcu_periph_clock_enable(RCU_SPI0); // PA5(SCK), PA6(MISO), PA7(MOSI) gpio_af_set(GPIOA, GPIO_AF_5, GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7); gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7); gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7); // PA4(CS1), PB12(CS2), PA15(CS3) gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_4 | GPIO_PIN_15); gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_4 | GPIO_PIN_15); gpio_bit_set(GPIOA, GPIO_PIN_4 | GPIO_PIN_15); // 拉高CS取消选中SPI从站 gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_12); gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_12); gpio_bit_set(GPIOB, GPIO_PIN_12); // 拉高CS取消选中SPI从站 dma_single_data_parameter_struct dma_init_struct; // 初始化SPI0_TX的DMA1_CH5 dma_deinit(DMA1, DMA_CH5); dma_init_struct.periph_addr = (uint32_t)&SPI_DATA(SPI0); dma_init_struct.memory0_addr = (uint32_t)(spi_send_array); dma_init_struct.direction = DMA_MEMORY_TO_PERIPH; dma_init_struct.periph_memory_width = DMA_PERIPH_WIDTH_16BIT; // 每16bit处理一次收发 dma_init_struct.priority = DMA_PRIORITY_LOW; dma_init_struct.number = 2; dma_init_struct.periph_inc = DMA_PERIPH_INCREASE_DISABLE; dma_init_struct.memory_inc = DMA_MEMORY_INCREASE_ENABLE; dma_init_struct.circular_mode = DMA_CIRCULAR_MODE_DISABLE; dma_single_data_mode_init(DMA1, DMA_CH5, &dma_init_struct); dma_channel_subperipheral_select(DMA1, DMA_CH5, DMA_SUBPERI3); // 初始化SPI0_RX的DMA1_CH0 dma_deinit(DMA1, DMA_CH0); dma_init_struct.periph_addr = (uint32_t)&SPI_DATA(SPI0); dma_init_struct.memory0_addr = (uint32_t)(spi_recv_array); dma_init_struct.direction = DMA_PERIPH_TO_MEMORY; dma_init_struct.periph_memory_width = DMA_PERIPH_WIDTH_16BIT; // 每16bit处理一次收发 dma_init_struct.priority = DMA_PRIORITY_HIGH; dma_init_struct.number = 2; dma_init_struct.periph_inc = DMA_PERIPH_INCREASE_DISABLE; dma_init_struct.memory_inc = DMA_MEMORY_INCREASE_ENABLE; dma_init_struct.circular_mode = DMA_CIRCULAR_MODE_DISABLE; dma_single_data_mode_init(DMA1, DMA_CH0, &dma_init_struct); dma_channel_subperipheral_select(DMA1, DMA_CH0, DMA_SUBPERI3); dma_interrupt_enable(DMA1, DMA_CH0, DMA_CHXCTL_FTFIE); // DMA接收完成中断 nvic_irq_enable(DMA1_Channel0_IRQn, 0, 0); // 优先级00 spi_parameter_struct spi_init_struct; // 初始化SPI0 spi_struct_para_init(&spi_init_struct); spi_init_struct.trans_mode = SPI_TRANSMODE_FULLDUPLEX; spi_init_struct.device_mode = SPI_MASTER; spi_init_struct.frame_size = SPI_FRAMESIZE_16BIT; // 每16bit处理一次收发 spi_init_struct.clock_polarity_phase = SPI_CK_PL_LOW_PH_2EDGE; // SCK空闲时低电平,第2个跳变沿(下降沿)采集数据 spi_init_struct.nss = SPI_NSS_SOFT; spi_init_struct.prescale = SPI_PSC_16; // SPI0用PCLK2=120MHz,16分频是7.5MHz,小于DRV8311的最大时钟10MHz spi_init_struct.endian = SPI_ENDIAN_MSB; spi_init(SPI0, &spi_init_struct); spi_enable(SPI0); spi_dma_enable(SPI0, SPI_DMA_RECEIVE); spi_dma_enable(SPI0, SPI_DMA_TRANSMIT); } // DRV8311的电流采样引脚初始化,ADC外设初始化 void drv8311_adc_init(void) { } // 获取DRV8311的硬件报错状态 // chip_num: [0]第1片DRV8311,[1]第2片DRV8311,[2]第3片DRV8311 // return: [0]DRV8311无硬件报错,[1]DRV8311硬件报错 uint8_t drv8311_get_fault(uint8_t chip_num) { uint32_t port[3] = {GPIOE, GPIOE, GPIOE}; uint32_t pin[3] = {GPIO_PIN_3, GPIO_PIN_4, GPIO_PIN_5}; return (1 - gpio_input_bit_get(port[chip_num], pin[chip_num])); } // 设置DRV8311片选CS低电平 // chip_num: [0]第1片DRV8311,[1]第2片DRV8311,[2]第3片DRV8311 void drv8311_set_cs_low(uint8_t chip_num) { uint32_t port[3] = {GPIOA, GPIOB, GPIOA}; uint32_t pin[3] = {GPIO_PIN_4, GPIO_PIN_12, GPIO_PIN_15}; gpio_bit_reset(port[chip_num], pin[chip_num]); } // 设置DRV8311片选CS高电平 // chip_num: [0]第1片DRV8311,[1]第2片DRV8311,[2]第3片DRV8311 void drv8311_set_cs_high(uint8_t chip_num) { uint32_t port[3] = {GPIOA, GPIOB, GPIOA}; uint32_t pin[3] = {GPIO_PIN_4, GPIO_PIN_12, GPIO_PIN_15}; gpio_bit_set(port[chip_num], pin[chip_num]); } // 单次16bit数据SPI通信,轮询模式,用于初始化 // data: MOSI发送的数据 // return: MISO接收的数据 uint16_t drv8311_spi_read_write(uint16_t data) { while (RESET == spi_i2s_flag_get(SPI0, SPI_FLAG_TBE)) // 等待发送缓冲区为空 { } spi_i2s_data_transmit(SPI0, data); // 发送数据 while (RESET == spi_i2s_flag_get(SPI0, SPI_FLAG_RBNE)) // 等待接收缓冲区非空 { } uint16_t recv_data = spi_i2s_data_receive(SPI0); // 读取接收到的数据 return recv_data; } // DRV8311 tSPI帧格式: 16bit命令+16bit数据 // bit31: R/W位, 0=写, 1=读 // bit30-27: 4bit从站地址00(AD1)(AD0),原理图是0000 // bit26-19: 8bit寄存器地址 // bit18-17: 2bit保留位00 // bit16: 校验位(偶校验) // bit15: 校验位(偶校验) // bit14-0: 15bit数据 // 读1个寄存器值,轮询模式,用于初始化 // chip_num: [0]第1片DRV8311,[1]第2片DRV8311,[2]第3片DRV8311 // reg: DRV8311寄存器序号 // return: DRV8311的寄存器值 uint16_t drv8311_read_reg(uint8_t chip_num, uint8_t reg) { uint16_t send_data[2]; uint16_t recv_data[2]; send_data[0] = 0x8000 | (drv8311_reg_addr[reg] << 3); send_data[1] = 0x0000; drv8311_set_cs_low(chip_num); recv_data[0] = drv8311_spi_read_write(send_data[0]); recv_data[1] = drv8311_spi_read_write(send_data[1]); drv8311_set_cs_high(chip_num); drv8311_reg_val[chip_num][DEV_STS1_REG] = recv_data[0] & 0xFF; drv8311_reg_val[chip_num][reg] = recv_data[1]; return recv_data[1]; } // 写1个寄存器值,轮询模式,用于初始化 // chip_num: [0]第1片DRV8311,[1]第2片DRV8311,[2]第3片DRV8311 // reg: DRV8311寄存器序号 // reg_data: 写入值 void drv8311_write_reg(uint8_t chip_num, uint8_t reg, uint16_t reg_data) { uint16_t send_data[2]; uint16_t recv_data[2]; send_data[0] = drv8311_reg_addr[reg] << 3; send_data[1] = reg_data; drv8311_set_cs_low(chip_num); recv_data[0] = drv8311_spi_read_write(send_data[0]); recv_data[1] = drv8311_spi_read_write(send_data[1]); drv8311_set_cs_high(chip_num); drv8311_reg_val[chip_num][DEV_STS1_REG] = recv_data[0] & 0xFF; } // DRV8311寄存器值上电初始化配置,轮询模式,用于初始化 void drv8311_reg_init(void) { // DEV_STS1无需配置,状态寄存器 // OT_STS无需配置,状态寄存器 // SUP_STS无需配置,状态寄存器 // DRV_STS无需配置,状态寄存器 // SYS_STS无需配置,状态寄存器 // PWM_SYNC_PRD无需配置,内容是DRV8311捕获PWM_SYNC脉宽的测量值 drv8311_write_reg(DRV_1, FLT_MODE_REG, 0x0015); // 非默认值,报警后会(快速)恢复发波(5ms),OTP read fault写1写不进去,关不掉 drv8311_write_reg(DRV_1, SYSF_CTRL_REG, 0x0515); // 默认值 drv8311_write_reg(DRV_1, DRVF_CTRL_REG, 0x0030); // 默认值,在PWN电平切换附近(1us)忽略过流,电流大于(9A)持续(1us)报警过流 drv8311_write_reg(DRV_1, FLT_TCTRL_REG, 0x0003); // 默认值,(慢速)恢复发波的时间是(0.5s),(快速)恢复发波的时间是(5ms) drv8311_write_reg(DRV_1, FLT_CLR_REG, 0x0001); // 非默认值,清除故障位 drv8311_write_reg(DRV_1, PWMG_PERIOD_REG, 625); // 非默认值,DRV8311时钟20MHz,载波16KHz,中心模式,计数值625->0->625,在PWM_SYNC模式下无效 drv8311_write_reg(DRV_1, PWMG_A_DUTY_REG, 156); // 非默认值,初始化占空比 drv8311_write_reg(DRV_1, PWMG_B_DUTY_REG, 312); // 非默认值,初始化占空比 drv8311_write_reg(DRV_1, PWMG_C_DUTY_REG, 468); // 非默认值,初始化占空比 drv8311_write_reg(DRV_1, PWM_STATE_REG, 0x0777); // 默认值,启用上下桥,上桥极性=PWM,下桥极性=PWM取反 drv8311_write_reg(DRV_1, PWMG_CTRL_REG, 0x0040); // 默认值,禁止发波,PWM中心模式,启用PWM_SYNC功能,SPICLK校准功能保持默认 drv8311_write_reg(DRV_1, PWM_CTRL1_REG, 0x0007); // 默认值,PWM Generation mode drv8311_write_reg(DRV_1, DRV_CTR_REG, 0x0033); // 非默认值,死区0.6us,MOS开关电压斜率设为最大230V/us drv8311_write_reg(DRV_1, CSA_CTRL_REG, 0x0008); // 默认值,启用电流检测,电流检测输出比例=0.25V/A(量程大精度低) drv8311_write_reg(DRV_1, SYS_CTRL_REG, 0x5000); // 非默认值,解锁这个寄存器,然后写0 } // 读1个寄存器值,DMA模式,用于运行中 // [读1个寄存器][读4个状态寄存器][写1个寄存器值][写3个占空比寄存器],每个电流环4选1来执行 // chip_num: [0]第1片DRV8311,[1]第2片DRV8311,[2]第3片DRV8311 // reg: DRV8311寄存器序号 void drv8311_read_reg_dma(uint8_t chip_num, uint8_t reg) { spi_dma_type[chip_num] = READ_1_REG; spi_dma_reg[chip_num] = reg; // 读取spi_dma_reg[chip_num]指定的寄存器的值 } // 读4个状态寄存器,DMA模式,用于运行中 // [读1个寄存器][读4个状态寄存器][写1个寄存器值][写3个占空比寄存器],每个电流环4选1来执行 // chip_num: [0]第1片DRV8311,[1]第2片DRV8311,[2]第3片DRV8311 void drv8311_get_state_dma(uint8_t chip_num) { spi_dma_type[chip_num] = READ_4_REG; } // 写1个寄存器值,DMA模式,用于运行中 // [读1个寄存器][读4个状态寄存器][写1个寄存器值][写3个占空比寄存器],每个电流环4选1来执行 // chip_num: [0]第1片DRV8311,[1]第2片DRV8311,[2]第3片DRV8311 // reg: DRV8311寄存器序号 // reg_data: 写入值 void drv8311_write_reg_dma(uint8_t chip_num, uint8_t reg, uint16_t reg_data) { spi_dma_type[chip_num] = WRITE_1_REG; spi_dma_reg[chip_num] = reg; spi_dma_data[chip_num][0] = reg_data; } // 写3个占空比寄存器,DMA模式,用于运行中 // [读1个寄存器][读4个状态寄存器][写1个寄存器值][写3个占空比寄存器],每个电流环4选1来执行 // chip_num: [0]第1片DRV8311,[1]第2片DRV8311,[2]第3片DRV8311 // duty_a: DRV8311的A相占空比 // duty_b: DRV8311的B相占空比 // duty_c: DRV8311的C相占空比 void drv8311_set_duty_dma(uint8_t chip_num, uint16_t duty_a, uint16_t duty_b, uint16_t duty_c) { spi_dma_type[chip_num] = WRITE_3_REG; spi_dma_data[chip_num][0] = duty_a; spi_dma_data[chip_num][1] = duty_b; spi_dma_data[chip_num][2] = duty_c; } // 启动DRV8311的SPI_DMA收发 // chip_num: [0]第1片DRV8311,[1]第2片DRV8311,[2]第3片DRV8311 void drv8311_dma_start(uint8_t chip_num) { uint32_t num = 0; spi_dma_chip = chip_num; // 拼装读1个寄存器的数据帧 if (READ_1_REG == spi_dma_type[chip_num]) { spi_send_array[0] = 0x8000 | (drv8311_reg_addr[spi_dma_reg[chip_num]] << 3); spi_send_array[1] = 0; num = 2; } // 拼装读4个状态寄存器的数据帧 else if (READ_4_REG == spi_dma_type[chip_num]) { spi_send_array[0] = 0x8000 | (OT_STS_ADDR << 3); // 从OT_STS_ADDR开始连读4个寄存器 spi_send_array[1] = 0; spi_send_array[2] = 0; spi_send_array[3] = 0; spi_send_array[4] = 0; num = 5; } // 拼装写1个寄存器的数据帧 else if (WRITE_1_REG == spi_dma_type[chip_num]) { spi_send_array[0] = drv8311_reg_addr[spi_dma_reg[chip_num]] << 3; spi_send_array[1] = spi_dma_data[chip_num][0]; num = 2; } // 拼装写3个占空比寄存器的数据帧 else if (WRITE_3_REG == spi_dma_type[chip_num]) { spi_send_array[0] = PWMG_A_DUTY_ADDR << 3; // 从PWMG_A_DUTY开始连写3个寄存器 spi_send_array[1] = spi_dma_data[chip_num][0]; spi_send_array[2] = spi_dma_data[chip_num][1]; spi_send_array[3] = spi_dma_data[chip_num][2]; num = 4; } // 设置片选,设置DMA传输数量,启动DMA drv8311_set_cs_low(chip_num); dma_channel_disable(DMA1, DMA_CH5); dma_channel_disable(DMA1, DMA_CH0); dma_flag_clear(DMA1, DMA_CH5, DMA_FLAG_FTF); dma_flag_clear(DMA1, DMA_CH0, DMA_FLAG_FTF); dma_transfer_number_config(DMA1, DMA_CH5, num); dma_transfer_number_config(DMA1, DMA_CH0, num); dma_channel_enable(DMA1, DMA_CH5); dma_channel_enable(DMA1, DMA_CH0); } // 结束DRV8311的SPI_DMA收发 // chip_num: [0]第1片DRV8311,[1]第2片DRV8311,[2]第3片DRV8311 void drv8311_dma_end(uint8_t chip_num) { // 取消片选,停止DMA drv8311_set_cs_high(chip_num); dma_channel_disable(DMA1, DMA_CH5); dma_channel_disable(DMA1, DMA_CH0); dma_flag_clear(DMA1, DMA_CH5, DMA_FLAG_FTF); dma_flag_clear(DMA1, DMA_CH0, DMA_FLAG_FTF); // 读取1个寄存器的操作完成,将SPI接收数据更新至寄存器值 if (READ_1_REG == spi_dma_type[chip_num]) { drv8311_reg_val[chip_num][DEV_STS1_REG] = spi_recv_array[0] & 0xFF; // 读取到DEV_STS1寄存器的值 drv8311_reg_val[chip_num][spi_dma_reg[chip_num]] = spi_recv_array[1]; // 读取到spi_dma_reg[chip_num]指定的寄存器的值 } // 读取4个寄存器的操作完成,将SPI接收数据更新至寄存器值 else if (READ_4_REG == spi_dma_type[chip_num]) { drv8311_reg_val[chip_num][DEV_STS1_REG] = spi_recv_array[0] & 0xFF; // 读取到DEV_STS1寄存器的值 drv8311_reg_val[chip_num][OT_STS_REG] = spi_recv_array[1]; // 读取到OT_STS寄存器的值 drv8311_reg_val[chip_num][SUP_STS_REG] = spi_recv_array[2]; // 读取到SUP_STS寄存器的值 drv8311_reg_val[chip_num][DRV_STS_REG] = spi_recv_array[3]; // 读取到DRV_STS寄存器的值 drv8311_reg_val[chip_num][SYS_STS_REG] = spi_recv_array[4]; // 读取到SYS_STS寄存器的值 } // 写入1个寄存器的操作完成 else if (WRITE_1_REG == spi_dma_type[chip_num]) { // 写入操作的回复帧不处理 } // 写入3个寄存器的操作完成 else if (WRITE_3_REG == spi_dma_type[chip_num]) { // 写入操作的回复帧不处理 } // 变量重置 memset(spi_send_array, 0, sizeof(spi_send_array)); memset(spi_recv_array, 0, sizeof(spi_recv_array)); spi_dma_type[chip_num] = READ_1_REG; // 默认读1个寄存器 spi_dma_reg[chip_num] = DEV_STS1_REG; // 默认读DEV_STS1寄存器 spi_dma_data[chip_num][0] = 0; spi_dma_data[chip_num][1] = 0; spi_dma_data[chip_num][2] = 0; } // DRV8311的SPI_DMA接收完成中断函数 void drv8311_spi_dma_isr(void) { // 第1次进中断,第1片DRV8311的SPI_DMA收发完成 if (DRV_1 == spi_dma_chip) { drv8311_dma_end(DRV_1); // 结束第1片DRV8311的SPI_DMA收发 // drv8311_dma_start(DRV_2); // 启动第2片DRV8311的SPI_DMA收发 } // 第2次进中断,第2片DRV8311的SPI_DMA收发完成 /*else if (DRV_2 == spi_dma_chip) { drv8311_dma_end(DRV_2); // 结束第2片DRV8311的SPI_DMA收发 drv8311_dma_start(DRV_3); // 启动第3片DRV8311的SPI_DMA收发 } // 第3次进中断,第3片DRV8311的SPI_DMA收发完成 else if (DRV_3 == spi_dma_chip) { drv8311_dma_end(DRV_2); // 结束第3片DRV8311的SPI_DMA收发 spi_dma_chip = DRV_1; // 初始化 }*/ } // 使能PWM发波 // chip_num: [0]第1片DRV8311,[1]第2片DRV8311,[2]第3片DRV8311 void drv8311_enable_pwm(uint8_t chip_num) { drv8311_write_reg_dma(chip_num, PWMG_CTRL_REG, 0x0440); } // 禁止PWM发波 // chip_num: [0]第1片DRV8311,[1]第2片DRV8311,[2]第3片DRV8311 void drv8311_disable_pwm(uint8_t chip_num) { drv8311_write_reg_dma(chip_num, PWMG_CTRL_REG, 0x0040); }