feat: 完成基本的Jpeg控制

This commit is contained in:
2025-08-08 18:38:16 +08:00
parent 58378851bb
commit 771f5e8e9f
7 changed files with 390 additions and 89 deletions

View File

@@ -12,7 +12,7 @@ static class AnalyzerAddr
const UInt32 DMA1_BASE = 0x7000_0000;
const UInt32 DDR_BASE = 0x0000_0000;
/// <summary>
/// <summary>
/// 0x0000_0000 R/W [ 0] capture on: 置1开始等待捕获0停止捕获。捕获到信号后该位自动清零。 <br/>
/// [ 8] capture force: 置1则强制捕获信号自动置0。 <br/>
/// [16] capture busy: 1为逻辑分析仪正在捕获信号。 <br/>
@@ -21,7 +21,7 @@ static class AnalyzerAddr
/// </summary>
public const UInt32 CAPTURE_MODE = BASE + 0x0000_0000;
/// <summary>
/// <summary>
/// 0x0000_0001 R/W [1:0] global trig mode: 00: 全局与 (&amp;) <br/>
/// 01: 全局或 (&#124;) <br/>
/// 10: 全局非与(~&amp;) <br/>
@@ -29,7 +29,7 @@ static class AnalyzerAddr
/// </summary>
public const UInt32 GLOBAL_TRIG_MODE = BASE + 0x0000_0001;
/// <summary>
/// <summary>
/// 0x0000_0010 - 0x0000_0017 R/W [5:0] 信号M的触发操作符共8路 <br/>
/// [5:3] M's Operator: 000 == <br/>
/// 001 != <br/>
@@ -73,7 +73,7 @@ static class AnalyzerAddr
public const UInt32 DMA1_CAPTURE_CTRL_ADDR = DMA1_BASE + 0x0000_0014;
public const UInt32 STORE_OFFSET_ADDR = DDR_BASE + 0x0100_0000;
/// <summary>
/// <summary>
/// 0x0100_0000 - 0x0100_03FF 只读 32位波形存储得到的32位数据中低八位最先捕获高八位最后捕获。<br/>
/// 共1024个地址每个地址存储4组深度为4096。<br/>
/// </summary>
@@ -87,53 +87,53 @@ static class AnalyzerAddr
[Flags]
public enum CaptureStatus
{
/// <summary>
/// <summary>
/// 无状态标志
/// </summary>
None = 0,
/// <summary>
/// <summary>
/// 捕获使能位置1开始等待捕获0停止捕获。捕获到信号后该位自动清零
/// </summary>
CaptureOn = 1 << 0, // [0] 捕获使能
/// <summary>
/// <summary>
/// 强制捕获位置1则强制捕获信号自动置0
/// </summary>
CaptureForce = 1 << 8, // [8] 强制捕获
/// <summary>
/// <summary>
/// 捕获忙碌位1为逻辑分析仪正在捕获信号
/// </summary>
CaptureBusy = 1 << 16, // [16] 捕获进行中
/// <summary>
/// <summary>
/// 捕获完成位1为逻辑分析仪内存完整存储了此次捕获的信号
/// </summary>
CaptureDone = 1 << 24 // [24] 捕获完成
}
/// <summary>
/// <summary>
/// 全局触发模式枚举,定义多路信号触发条件的逻辑组合方式
/// </summary>
public enum GlobalCaptureMode
{
/// <summary>
/// <summary>
/// 全局与模式,所有触发条件都必须满足
/// </summary>
AND = 0b00,
/// <summary>
/// <summary>
/// 全局或模式,任一触发条件满足即可
/// </summary>
OR = 0b01,
/// <summary>
/// <summary>
/// 全局非与模式,不是所有触发条件都满足
/// </summary>
NAND = 0b10,
/// <summary>
/// <summary>
/// 全局非或模式,所有触发条件都不满足
/// </summary>
NOR = 0b11
@@ -144,32 +144,32 @@ public enum GlobalCaptureMode
/// </summary>
public enum AnalyzerClockDiv
{
/// <summary>
/// <summary>
/// 1分频
/// </summary>
DIV1 = 0x0000_0000,
/// <summary>
/// <summary>
/// 2分频
/// </summary>
DIV2 = 0x0000_0001,
/// <summary>
/// <summary>
/// 4分频
/// </summary>
DIV4 = 0x0000_0002,
/// <summary>
/// <summary>
/// 8分频
/// </summary>
DIV8 = 0x0000_0003,
/// <summary>
/// <summary>
/// 16分频
/// </summary>
DIV16 = 0x0000_0004,
/// <summary>
/// <summary>
/// 32分频
/// </summary>
DIV32 = 0x0000_0005,
@@ -190,27 +190,27 @@ public enum AnalyzerClockDiv
/// </summary>
public enum SignalOperator : byte
{
/// <summary>
/// <summary>
/// 等于操作符
/// </summary>
Equal = 0b000, // ==
/// <summary>
/// <summary>
/// 不等于操作符
/// </summary>
NotEqual = 0b001, // !=
/// <summary>
/// <summary>
/// 小于操作符
/// </summary>
LessThan = 0b010, // <
/// <summary>
/// <summary>
/// 小于等于操作符
/// </summary>
LessThanOrEqual = 0b011, // <=
/// <summary>
/// <summary>
/// 大于操作符
/// </summary>
GreaterThan = 0b100, // >
/// <summary>
/// <summary>
/// 大于等于操作符
/// </summary>
GreaterThanOrEqual = 0b101 // >=
@@ -221,35 +221,35 @@ public enum SignalOperator : byte
/// </summary>
public enum SignalValue : byte
{
/// <summary>
/// <summary>
/// 逻辑0电平
/// </summary>
Logic0 = 0b000, // LOGIC 0
/// <summary>
/// <summary>
/// 逻辑1电平
/// </summary>
Logic1 = 0b001, // LOGIC 1
/// <summary>
/// <summary>
/// 不关心该信号状态
/// </summary>
NotCare = 0b010, // X(not care)
/// <summary>
/// <summary>
/// 上升沿触发
/// </summary>
Rise = 0b011, // RISE
/// <summary>
/// <summary>
/// 下降沿触发
/// </summary>
Fall = 0b100, // FALL
/// <summary>
/// <summary>
/// 上升沿或下降沿触发
/// </summary>
RiseOrFall = 0b101, // RISE OR FALL
/// <summary>
/// <summary>
/// 信号无变化
/// </summary>
NoChange = 0b110, // NOCHANGE
/// <summary>
/// <summary>
/// 特定数值
/// </summary>
SomeNumber = 0b111 // SOME NUMBER
@@ -260,11 +260,11 @@ public enum SignalValue : byte
/// </summary>
public enum AnalyzerChannelDiv
{
/// <summary>
/// <summary>
/// 1路
/// </summary>
ONE = 0x0000_0000,
/// <summary>
/// <summary>
/// 2路
/// </summary>
TWO = 0x0000_0001,
@@ -366,7 +366,7 @@ public class Analyzer
/// <returns>操作结果,成功返回寄存器值,否则返回异常信息</returns>
public async ValueTask<Result<CaptureStatus>> ReadCaptureStatus()
{
var ret = await UDPClientPool.ReadAddr(this.ep, this.taskID, AnalyzerAddr.CAPTURE_MODE, this.timeout);
var ret = await UDPClientPool.ReadAddrByte(this.ep, this.taskID, AnalyzerAddr.CAPTURE_MODE, this.timeout);
if (!ret.IsSuccessful)
{
logger.Error($"Failed to read capture status: {ret.Error}");