从SOD到OOD(HLS生成模块的特定操作集)

从基类class继承,就可以包含那些共性操作集,
然后只需要在衍生类中,封装特定的操作集,就可以了。

class BayerPhotoAxim : public XhlsAccl
{
public:
	BayerPhotoAxim(u32 phy_base, u32 size) : XhlsAccl(phy_base, size) {}

	void set_ddr_base(u32 value) {
		regs_.set_value(4, value);
	}

	void set_param(u32 width, u32 height, u32 sensor_width, u32 sensor_height) {
		width = (width / 16) * 16;
		u32 x = (sensor_width - width) / 2;
		u32 y = (sensor_height - height) / 2;

		set_crop_x(x);
		set_crop_y(y);
		set_crop_width(width);
		set_crop_height(height);
	}

	void set_crop_x(u32 value) {
		crop_x_ = value;
		regs_.set_value(6, crop_x_ );
	}

	void set_crop_y(u32 value) {
		crop_y_ = value;
		regs_.set_value(8, crop_y_ );
	}

	void set_crop_width(u32 value) {
		crop_width_ = value;
		regs_.set_value(10, crop_width_ );
	}

	void set_crop_height(u32 value) {
		crop_height_ = value;
		regs_.set_value(12, crop_height_ );
	}

	void set_width(u32 value) {
		width_ = value;
		regs_.set_value(14, width_ );
	}

	void set_height(u32 value) {
		height_ = value;
		regs_.set_value(16, height_ );
	}

public:
	u32 crop_x_;
	u32 crop_y_;
	u32 crop_width_;
	u32 crop_height_;
	u32 width_;
	u32 height_;
};

一方面,将传入的参数在本地保存一份副本,另一方面,将传入的参数通过IOMEM发送到AXI总线上去。

对应的,来看看BSP中的driver中对应的操作集,

void XBayer_photo_accl_Set_crop_x(XBayer_photo_accl *InstancePtr, u32 Data) {
    Xil_AssertVoid(InstancePtr != NULL);
    Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);

    XBayer_photo_accl_WriteReg(InstancePtr->Control_bus_BaseAddress, XBAYER_PHOTO_ACCL_CONTROL_BUS_ADDR_CROP_X_DATA, Data);
}

void XBayer_photo_accl_Set_crop_y(XBayer_photo_accl *InstancePtr, u32 Data) {
    Xil_AssertVoid(InstancePtr != NULL);
    Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);

    XBayer_photo_accl_WriteReg(InstancePtr->Control_bus_BaseAddress, XBAYER_PHOTO_ACCL_CONTROL_BUS_ADDR_CROP_Y_DATA, Data);
}

void XBayer_photo_accl_Set_crop_width(XBayer_photo_accl *InstancePtr, u32 Data) {
    Xil_AssertVoid(InstancePtr != NULL);
    Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);

    XBayer_photo_accl_WriteReg(InstancePtr->Control_bus_BaseAddress, XBAYER_PHOTO_ACCL_CONTROL_BUS_ADDR_CROP_WIDTH_DATA, Data);
}

void XBayer_photo_accl_Set_crop_height(XBayer_photo_accl *InstancePtr, u32 Data) {
    Xil_AssertVoid(InstancePtr != NULL);
    Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);

    XBayer_photo_accl_WriteReg(InstancePtr->Control_bus_BaseAddress, XBAYER_PHOTO_ACCL_CONTROL_BUS_ADDR_CROP_HEIGHT_DATA, Data);
}

void XBayer_photo_accl_Set_width(XBayer_photo_accl *InstancePtr, u32 Data) {
    Xil_AssertVoid(InstancePtr != NULL);
    Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);

    XBayer_photo_accl_WriteReg(InstancePtr->Control_bus_BaseAddress, XBAYER_PHOTO_ACCL_CONTROL_BUS_ADDR_WIDTH_DATA, Data);
}

void XBayer_photo_accl_Set_height(XBayer_photo_accl *InstancePtr, u32 Data) {
    Xil_AssertVoid(InstancePtr != NULL);
    Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);

    XBayer_photo_accl_WriteReg(InstancePtr->Control_bus_BaseAddress, XBAYER_PHOTO_ACCL_CONTROL_BUS_ADDR_HEIGHT_DATA, Data);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值