ADI Blackfin DSP处理器-BF533的开发详解54:CVBS输出-DSP和CH7024的应用详解(含源码)

news2024/11/18 2:51:19

硬件准备

ADSP-EDU-BF533:BF533开发板
AD-HP530ICE:ADI DSP仿真器

软件准备

Visual DSP++软件

硬件链接

在这里插入图片描述
CVBS OUT 视频输出

在这里插入图片描述

硬件实现原理

CVBS_OUT 子卡板连接在 ADSP-EDU-BF53x 开发板的扩展端口 PORT3 和 PORT4 上,板卡插入时,应将扩展子卡板上标注的“圆圈”符号与板卡上的“圆圈”对准插入,避免子卡板反向接入板卡。正确插入子卡板后,CVBS
输出的接口是朝向板外。

CVBS_OUT BOARD 子卡板采用了功能强大的视频编码芯片 CH7024B,该芯片支持尺寸拉伸功能,可以将非D1 尺寸的图像数据拉伸到 D1 的尺寸(即 720576 或 720480),不需要再对非 D1 的数据格式作处理,并且支持
RGB,YUV 等多种数据格式输入,方便视频开发。

CVBS_OUT BOARD 子卡板接口说明:

下图为 CVBS_OUT BOARD 子卡板顶视示意图,板卡上有白、红、黄三个接口,分别代表的接口功能是C/CVBS、Y、CVBS。该接口支持 CVBS、S-Video、YPrPb 模式的视频输出。例子程序仅使用了 CVBS 视频输出的功能。

在这里插入图片描述

CH7024B 采用 IIC 总线配置初始化,其 IIC 地址为:
CH7024B IIC 器件地址: Slave address W 为 0xEC,Slave address R 为 0xED
CH7024B 和 LCD 公用一个 PPI 接口,其 PPI 时钟由 CPLD 提供,通过配置 CPLD 来切换 PPI 时钟。

DEVICE_OE 寄存器(读/写):
DEVICE_OE 寄存器地址:0x20320000
DEVICE_OE 寄存器设置硬件设备上一些控制管脚的电平状态。

DEVICE_OE 寄存器位功能:

在这里插入图片描述

PPI_SET1~0:PPI 选择位
00:选通 CMOS PPI 时钟,使能 CMOS
01:选通 TFT PPI 时钟
选通 板卡为扩展接口的 PPICLK 提供时钟
1x:选通 PPI 时钟由扩展接口输入

选通 CVBS OUT 子卡板 PPI 接口,需将 PPI_SET0 位设置为 1,PPI_SET1 位设置为 0。

硬件连接示意图

在这里插入图片描述

代码实现功能

代码实现了通过文件系统读取一张 320240 RGB888 格式的图片,将图像数据送给 CH7024B,CH7024B 将图片拉伸到 720576 尺寸,通过 CVBS 接口输出。通过莲花头视频线,将输出的信号连接电视机,可以在电视上看到
输出的图像。

测试步骤
1. 将仿真器(ICE)与 ADSP-EDU-BF53x 开发板和计算机连接好,将 CVBS_OUT 子卡板插入扩展板接口 PORT3和 PORT4,正确接入后,视频输出接口朝板外。
2. 将莲花头视频线接入 CVBS_OUT 子卡板黄色接口,另一端连接电视机 AV 输入的视频接口,将电视机调到AV 模式。
3. 先给 ADSP-EDU-BF53x 开发板上电,再为仿真器(ICE)上电。
4. 运行 VisualDSP++ 5.0 软件,选择合适的 BF53x 的 session 将仿真器与软件连接。
5. 加载 VisualDSP++ 5.0 工程文件 BF53x_CVBSOUT_320_240.dpj 文件,编译并全速运行。

测试结果

在电视机上可以看到测试图像输出。

在这里插入图片描述

程序源码

ch7024.c

#include <cdefBF533.h>
#include"i2c.h"

#define CH7024_ADDRESS 0xec

static i2c_device mcu_i2c;

void init_OV9653(void);
int ch7024_write(unsigned char addr, unsigned char dat);
int ch7024_read(unsigned char addr, unsigned char * buf);
/****************************************************************************

  • 名称 :ch7024_write
  • 功能 : 写ov9653寄存器函数
  • 入口参数 :addr:寄存器偏移地址
    dat:寄存器配置值
  • 出口参数 :返回0
    /
    int ch7024_write(unsigned char addr, unsigned char dat)
    {
    int ret = -1;
    i2c_start(&mcu_i2c);
    //send slave address
    if(i2c_write(&mcu_i2c, CH7024_ADDRESS, 1)){
    i2c_stop(&mcu_i2c);
    return ret;
    }
    //send sub-address to device
    if(i2c_write(&mcu_i2c, addr, 1)){
    i2c_stop(&mcu_i2c);
    return ret;
    }
    //send data to device
    i2c_write(&mcu_i2c, dat, 1);
    i2c_stop(&mcu_i2c);
    return 0;
    }
    /
  • 名称 :ov9653_read
  • 功能 : 读ov9653寄存器函数寄存器偏移地址
  • 入口参数 :addr:
    buf:寄存器读取数据缓存
  • 出口参数 :返回0
    ****************************************************************************/
    int ch7024_read(unsigned char addr, unsigned char * buf)
    {
    unsigned char *p = buf;
    int ret = -1;
    i2c_start(&mcu_i2c);
    //send slave address
    if(i2c_write(&mcu_i2c, CH7024_ADDRESS, 1)){
    i2c_stop(&mcu_i2c);
    return ret;
    }
    //send sub-address of slave
    if(i2c_write(&mcu_i2c, addr, 1)){
    i2c_stop(&mcu_i2c);
    return ret;
    }
    i2c_stop(&mcu_i2c);
    i2c_start(&mcu_i2c);
    // send slave address (+1 read mode)
    if(i2c_write(&mcu_i2c, CH7024_ADDRESS+1, 1)){
    i2c_stop(&mcu_i2c);
    return ret;
    }
    if(i2c_wait_slave(&mcu_i2c, 1000)){
    i2c_stop(&mcu_i2c);
    return ret;
    }
    i2c_read(&mcu_i2c, p++, 1); // send ack
    i2c_stop(&mcu_i2c);
    return 0;
    }

/****************************************************************************

  • 名称 :Init_OV9653

  • 功能 : CMOS 130万 内部寄存器配置信息

  • 入口参数 :无

  • 出口参数 :无
    ****************************************************************************/
    void init_ch7024(void)
    {
    mcu_i2c.sclk = PF0; //时钟PF脚
    mcu_i2c.sdata = PF1; //数据PF脚
    mcu_i2c.low_ns = 7000; //低电平延时 ns
    mcu_i2c.high_ns = 6000; //高电平延时 ns
    i2c_init(&mcu_i2c);

    ch7024_write(0x04,0x00);
    ch7024_write(0x0A,0x13);
    ch7024_write(0x0B,0x0c);
    ch7024_write(0x0C,0x00);
    ch7024_write(0x0D,0x28);
    ch7024_write(0x0E,0x0c);
    ch7024_write(0x0F,0x00);
    ch7024_write(0x11,0x19);
    ch7024_write(0x12,0x40);
    ch7024_write(0x13,0xe8);
    ch7024_write(0x17,0x00);
    ch7024_write(0x18,0xf0);
    ch7024_write(0x19,0xfa);
    ch7024_write(0x1C,0x90);
    ch7024_write(0x28,0x08);
    ch7024_write(0x29,0x8b);
    ch7024_write(0x2A,0x80);
    ch7024_write(0x2B,0x20);
    ch7024_write(0x2C,0xf5);
    ch7024_write(0x2D,0x80);
    ch7024_write(0x2E,0x3b);
    ch7024_write(0x30,0x12);
    ch7024_write(0x31,0x13);
    ch7024_write(0x34,0x00);
    ch7024_write(0x35,0xa8);
    ch7024_write(0x36,0x87);
    ch7024_write(0x37,0x42);
    ch7024_write(0x63,0xc2);

/*
ch7024_write(0x02,0x01); //test
ch7024_write(0x04,0x64); //配置测试模式
ch7024_write(0x02,0x00);
*/
}

cpu.c

#include <cdefBF533.h>

void Set_PLL(int pmsel,int pssel)
{
int new_PLL_CTL;
*pPLL_DIV = pssel;
asm(“ssync;”);
new_PLL_CTL = (pmsel & 0x3f) << 9;
*pSIC_IWR |= 0xffffffff;
if (new_PLL_CTL != *pPLL_CTL)
{
*pPLL_CTL = new_PLL_CTL;
asm(“ssync;”);
asm(“idle;”);
}
}

void Init_SDRAM(void)
{
*pEBIU_SDRRC = 0x00000817;
*pEBIU_SDBCTL = 0x00000013;
*pEBIU_SDGCTL = 0x0091998d;
ssync();
}

void Init_EBIU(void)
{
*pEBIU_AMBCTL0 = 0x7bb07bb0;
*pEBIU_AMBCTL1 = 0x7bb07bb0;
*pEBIU_AMGCTL = 0x000f;
}

void Init_Timers0(int dat)
{
*pTIMER0_CONFIG = 0x0019;
*pTIMER0_WIDTH = dat;
*pTIMER0_PERIOD = 2000;
}

void Enable_Timers0(void)
{
*pTIMER_ENABLE|= 0x0001;
asm(“ssync;”);
}

void Stop_Timers0(void)
{
*pTIMER_ENABLE &= ~0x0001;
asm(“ssync;”);
}

i2c.c

#include <cdefBF533.h>
#include “i2c.h”

#define CORE_CLK_IN 25 * 1000 * 1000

#define SET_PF(pf)
do{
*pFIO_FLAG_S = (pf);
ssync();
}while(0)

#define CLR_PF(pf)
do{
*pFIO_FLAG_C = (pf);
ssync();
}while(0)

#define SET_PF_OUTPUT(pf)
do{
*pFIO_INEN &= ~(pf);
*pFIO_DIR |= (pf);
ssync();
}while(0)

#define SET_PF_INPUT(pf)
do{
*pFIO_DIR &= ~(pf);
*pFIO_INEN |= (pf);
ssync();
}while(0)

int get_core_clk(void)
{
int tempPLLCTL;
int _DF;
int VCO;
int MSEL1;

tempPLLCTL = *pPLL_CTL;


MSEL1 = ((tempPLLCTL & 0x7E00) >> 9);
_DF   =  tempPLLCTL & 0x0001;

VCO  = MSEL1 * __CORE_CLK_IN__;
if(_DF == 1)
	VCO /= 2;

return  VCO;

}
void delay_ns(unsigned int core_clock, unsigned long long count)
{
count *= core_clock;
count /= 1000000000;
while(count–);

}

int _get_sdata(i2c_device * dev)
{
return ((*pFIO_FLAG_D & dev->sdata) ? 1 : 0);
}

void i2c_init(i2c_device * dev)
{
dev->core_clock = get_core_clk();
dev->delay_ns = delay_ns;
*pFIO_DIR |= dev->sclk | dev->sdata;
ssync();
}

void i2c_deinit(i2c_device * dev)
{
dev->sclk = 0;
dev->sdata = 0;

*pFIO_DIR &=  ~(dev->sclk | dev->sdata);
ssync();

}

void i2c_start(i2c_device * dev)
{
SET_PF_OUTPUT(dev->sdata);
SET_PF_OUTPUT(dev->sclk);

SET_PF(dev->sdata);
SET_PF(dev->sclk);
delay_ns(dev->core_clock, dev->high_ns);

CLR_PF(dev->sdata);
delay_ns(dev->core_clock, dev->low_ns);

CLR_PF(dev->sclk);
delay_ns(dev->core_clock, dev->low_ns);

}

void i2c_stop(i2c_device * dev)
{
CLR_PF(dev->sclk);
delay_ns(dev->core_clock, dev->low_ns);

SET_PF_OUTPUT(dev->sdata);
CLR_PF(dev->sdata);
delay_ns(dev->core_clock, dev->low_ns);

SET_PF_INPUT(dev->sclk);
delay_ns(dev->core_clock, dev->high_ns);

SET_PF_INPUT(dev->sdata);
delay_ns(dev->core_clock, dev->high_ns);

}

int i2c_read_ack(i2c_device * dev)
{
int ret = 0;

SET_PF_INPUT(dev->sdata);
delay_ns(dev->core_clock, dev->high_ns/3);

SET_PF(dev->sclk);
delay_ns(dev->core_clock, dev->high_ns/3);

ret = _get_sdata(dev);

delay_ns(dev->core_clock, dev->high_ns/3);
CLR_PF(dev->sclk);

delay_ns(dev->core_clock, dev->low_ns);

SET_PF_OUTPUT(dev->sdata);
return ret;

}

int i2c_wait_slave(i2c_device * dev, unsigned int time_out)
{
int ret;
int count = time_out * 2 / dev->high_ns;

SET_PF_INPUT(dev->sclk);
delay_ns(dev->core_clock, dev->high_ns/2);

do{
	ret = *pFIO_FLAG_D & dev->sclk;
	if(ret)
	   break;
	delay_ns(dev->core_clock, dev->high_ns/2);
}while(count--);

SET_PF_OUTPUT(dev->sclk);
return !ret;

}

void i2c_write_ack(i2c_device * dev)
{
SET_PF_OUTPUT(dev->sdata);
CLR_PF(dev->sdata);
delay_ns(dev->core_clock, dev->high_ns/2);
SET_PF(dev->sclk);
delay_ns(dev->core_clock, dev->high_ns);

CLR_PF(dev->sclk);
delay_ns(dev->core_clock, dev->low_ns);

}

int i2c_write(i2c_device * dev, unsigned char value, int need_ack)
{
int ret = -1;
unsigned char index;

SET_PF_OUTPUT(dev->sdata);

//send 8 bits to slave
for(index = 0; index < 8; index++){
	//send one bit to the i2c bus
	if((value<<index) & 0x80){
		SET_PF(dev->sdata);
	} else {
		CLR_PF(dev->sdata);
	}
	
	delay_ns(dev->core_clock, dev->low_ns/2);
	
	SET_PF(dev->sclk);
	delay_ns(dev->core_clock, dev->high_ns);
	
	CLR_PF(dev->sclk);
	delay_ns(dev->core_clock, dev->low_ns/2);
}

if(need_ack){
	ret = i2c_read_ack(dev);
}
return ret;

}

int i2c_read(i2c_device * dev, unsigned char * value, int send_ack)
{
unsigned char index;
*value = 0x00;

SET_PF_INPUT(dev->sdata);
delay_ns(dev->core_clock, dev->high_ns/2);

//get 8 bits from the device
for(index = 0; index < 8; index++){
	SET_PF(dev->sclk);
	delay_ns(dev->core_clock, dev->high_ns/2);
	
	*value <<= 1;
	*value |= _get_sdata(dev);
	
	delay_ns(dev->core_clock, dev->high_ns/2);
	
	CLR_PF(dev->sclk);
	delay_ns(dev->core_clock, dev->low_ns);
}

// send ack to slave
if(send_ack){
	i2c_write_ack(dev);
}
return *value;

}

main.c

#include <cdefBF533.h>
#include <stdio.h>

extern unsigned char DisplayBuffer[][];
extern unsigned char DisplayBuffer_565[][];
extern unsigned char Inputdata[];

void main(void)
{
FILE *fp;
int lenth;

Set_PLL(16,4);
Init_EBIU();
Init_SDRAM();
LCDBK_Disable();

fp = fopen("../RGB888_320_240.bmp", "rb");
lenth = fread(Inputdata, 1, 230454, fp);
fclose(fp);

IIC_Enable();
init_ch7024();
bgrtorgb24();

RGB888_RGB565(&DisplayBuffer,230400,&DisplayBuffer_565);

PCLK_OUT_Enable();

InitDMA();
InitPPI();
InitTimer();
PPI_TMR_DMA_Enable();

while(1);

}

#include <cdefBF533.h>

section(“sdram0_bank1”) unsigned char DisplayBuffer[240][960] ;
section(“sdram0_bank1”) unsigned char DisplayBuffer_565[240][640] ;
section(“sdram0_bank1”) unsigned char TempBuffer_img[240][960] ;
section(“sdram0_bank1”) unsigned char Inputdata[230454];

void InitDMA(void)
{
int addr;
addr = &DisplayBuffer_565;
addr -= 640*10;
*pDMA0_START_ADDR = addr;

*pDMA0_X_COUNT = 640/2;
*pDMA0_X_MODIFY = 2;
*pDMA0_Y_COUNT = 250;
*pDMA0_Y_MODIFY = 2;	
*pDMA0_CONFIG = 0x1034;

}

void InitPPI(void)
{
*pPPI_CONTROL = 0xb81e;
*pPPI_DELAY = 0;
*pPPI_COUNT = 319;
*pPPI_FRAME = 250;
}

void InitTimer(void)
{
*pTIMER1_PERIOD = 1000;
*pTIMER1_WIDTH = 336;
*pTIMER1_CONFIG = 0x00a9;
*pTIMER2_PERIOD = 250000;
*pTIMER2_WIDTH = 5760;
*pTIMER2_CONFIG = 0x00a9;

}

void PPI_TMR_DMA_Enable(void)
{
*pDMA0_CONFIG |= 0x1;
asm(“ssync;”);
InitTimer();
*pPPI_CONTROL |= 0x1;
asm(“ssync;”);
*pTIMER_ENABLE|= 0x0006;
asm(“ssync;”);
}

void PPI_TMR_DMAR_Disable(void)
{
*pDMA0_CONFIG &= (~0x1);
*pPPI_CONTROL &= (~0x1);
}

void bgrtorgb24(void)
{

int i,j;
int a,b;

for(i=0;i<240;i++)
{
	for(j=0;j<960;j++)
	{
		TempBuffer_img[i][j] = Inputdata[i*960+j+54]; 		
	}
}	
for(i=0;i<240;i++)
{
	for(j=0;j<320;j++)
	{
   		a = TempBuffer_img[i][j*3];
   		b = TempBuffer_img[i][j*3+2];	
   		TempBuffer_img[i][j*3] = b;
   		TempBuffer_img[i][j*3+2] = a;
	}
}

for(i=0;i<240;i++)
{
	for(j=0;j<960;j++)
	{
		DisplayBuffer[i][j] = (TempBuffer_img[239-i][j]); 

	}
}

}

void RGB888_RGB565(unsigned char *src, int src_len, unsigned char *dst)
{
int i = 0;
int j = 0;

if (src_len % 3 != 0)
{
    return;
}
for (i = 0; i < src_len; i += 3)
{
     dst[j+1] = src[i+2] &0xf8; 			//B 
     dst[j+1] |= ((src[i+1]>>5) & 0x07);	//GH
     dst[j] = ((src[i+1]<<3) & 0xe0); 		//GL  
     dst[j] |= ((src[i]>>3) &0x1f); 		//R
    j += 2;  
    
}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/96330.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

window10 下Tomcat安装步骤

目录先安装JDK根据JDK选择tomcat版本下载安装设置系统变量运行测试先安装JDK 略过 根据JDK选择tomcat版本 打开CMD窗口&#xff0c;运行java -version查看本机JDK版本 C:\Users\admin>java -version java version "11.0.17" 2022-10-18 LTS Java(TM) SE Runtime E…

python函数讲解进阶

关于python函数的基本知识可以点击“python函数讲解” 目录 一.函数多返回值 思考 二.函数参数种类 1.位置参数 2.关键字参数 3.缺省参数 4.不定长参数 位置传递 关键字传递 总结 三.匿名函数 函数作为参数传递 lambda匿名函数 一.函数多返回值 思考 运行之后&…

Python抓取电商平台数据 / 采集商品评论 / 可视化展示 词云图...

前言 大家早好、午好、晚好吖 ❤ ~ 我给大家准备了一些资料&#xff0c;包括: 2022最新Python视频教程、Python电子书10个G &#xff08;涵盖基础、爬虫、数据分析、web开发、机器学习、人工智能、面试题&#xff09;、Python学习路线图等等 直接在文末名片自取即可&#x…

[附源码]Node.js计算机毕业设计公交电子站牌管理系统软件Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

多模态在医疗中的应用

多模态是把要检索的模态融合起来&#xff0c;做整体的检索&#xff0c;查询和检索的必须至少有一个模态是相同的&#xff0c;也就是要查询和检索的模态都已经在融合模态里了。 跨模态是检索结果和查询的模态是不同&#xff0c;如图像检索文本&#xff0c;视频和音频。跨模态检索…

2022-12-17 TCP/IP 协议栈_2

TCP/IP 协议栈_2前言一、TCP/IP协议栈四层协议系统二、封装和分用总结前言 既然要学习计算机网络编程, 就不得不提计网祖师爷 W Richard Stevens, 天妒英才, 先生于1999年就早早陨落. 不知多少人凭着先生所著 “TCP/IP详解” 以及 “UNIX网络编程” 吃的盆满钵满. 而至今可说还…

深入浅出 - Rust 所有权与内存管理机制

一、从变量说起 fn main() {// 基本数据类型let a 5;let b a;// 指针let ptr_a &a;let ptr_b &b;println!("a value {}", a);println!("b value {}", b);println!("ptr_a value {:p}", ptr_a);println!("ptr_b value {:p}…

未来笔试重点(1)

一起成为更优秀的人 1.数组笔试重点考察 1.1整型数组与sizeof 1.2字符数组与sizeof 1.3sizeof与字符串 1.4strlen与字符串 2.指针笔试重点考察 2.1指针与sizeof 2.2指针与strlen sizeof与整型数组 int a[] { 1,2,3,4 };printf("%d\n", sizeof(a));printf(…

NMS与Soft NMS算法解析以及numpy实现

1. NMS算法 1.1 什么是NMS算法 NMS全称为Non Maximum Suppression&#xff0c;中文意思是非极大值抑制&#xff0c;字面意思就是不是极大值的元素被抑制掉&#xff0c;其实就是筛选出局部最大值得到最优解。NMS算法被广泛运用于目标检测算法处理网络输出的边界框。 1.2 为什…

浅谈Linux内核页面换入换出

【推荐阅读】 浅谈linux 内核网络 sk_buff 之克隆与复制 深入linux内核架构--进程&线程 了解Docker 依赖的linux内核技术 怎么在Windows下使用Makefile文件 浅析linux内核网络协议栈--linux bridge 0x00内存页面分类与换入换出规则 内存页面分为用户页面和内核页面。…

GDT践行(第一期):起床---运动--阅读

这里记录每周GDT践行记录.【2022】年第【51】周的第【6】天 封面图 第三部分&#xff1a;起床---运动--阅读 ❝ 小贴士&#xff1a; 在学校&#xff0c;出租房&#xff0c;宾馆&#xff0c;工位很多因素导致 学习区&#xff0c;运动区 卧室 都是同一个地方 环境导致你彻底彻底糊…

[附源码]Python计算机毕业设计Django课程在线测评系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

JVM部分知识点

目录 JVM主要组成部分及其作用&#xff1f; JAVA程序运行机制详情 JVM运行时的数据区 堆和栈的区别&#xff1f; Java垃圾回收机制 Java中有哪些引用类型&#xff1f; 如何判断对象是否可以被回收&#xff1f; JVM中的永久代会发生垃圾回收吗&#xff1f; JVM有哪些垃圾…

我国航空煤油行业发展趋势:燃油附加费复收 或将缓解企业经营压力

根据观研报告网发布的《中国航空煤油市场现状深度研究与投资前景分析报告&#xff08;2022-2029年&#xff09;》显示&#xff0c;航空煤油是石油产品之一&#xff0c;别名无臭煤油&#xff0c;主要由不同馏分的烃类化合物组成。航空煤油密度适宜&#xff0c;热值高&#xff0c…

【C语言】浮点型的存储方式

目录 一、浮点型和整型存储方式一样吗&#xff1f; 二、浮点型的存储规则 2.1 S&#xff0c;M&#xff0c;E求法 2.2 如何存放&#xff33;&#xff0c;&#xff2d;&#xff0c;&#xff25; 2.2.1 IEEE 754规定 2.2.2 特别的规定 2.2.3 验证 2.3 取出规则 2.3…

改造冰蝎马,实现免杀之default_aes php

本专栏是笔者的网络安全学习笔记&#xff0c;一面分享&#xff0c;同时作为笔记 文章目录 文章目录文章目录前文链接前言效果目标密码验证功能免杀后话前文链接 WAMP/DVWA/sqli-labs 搭建burpsuite工具抓包及Intruder暴力破解的使用目录扫描&#xff0c;请求重发&#xff0c;漏…

[附源码]Python计算机毕业设计黑格伯爵国际英语贵族学校官网Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

5G无线技术基础自学系列 | 单站点验证概述

素材来源&#xff1a;《5G无线网络规划与优化》 一边学习一边整理内容&#xff0c;并与大家分享&#xff0c;侵权即删&#xff0c;谢谢支持&#xff01; 附上汇总贴&#xff1a;5G无线技术基础自学系列 | 汇总_COCOgsta的博客-CSDN博客 单站点验证是指在基站硬件安装调试完成…

RNA-seq 详细教程:可视化(12)

学习内容 了解如何为可视化准备数据了解如果利用可视化来探索分析结果火山图可视化热图可视化可视化结果 当我们处理大量数据时&#xff0c;以图形方式显示该信息以获得更多信息&#xff0c;可能很有用。在本课中&#xff0c;我们将让您开始使用探索差异基因表达数据时常用的一…

【数电实验】移位寄存器与计数器

实验四 移位寄存器与计数器 一 实验目的 1 掌握任意进制计数器的构成方法&#xff1b; 2 熟悉双向移位寄存器的使用方法。 二 实验内容 1 任意进制计数器的构成方法&#xff1a; 用中规模集成计数器74HC161和与非门74LS00&#xff0c;构成十进制计数器。要求分别使用同步预…