zoukankan      html  css  js  c++  java
  • Keil MDK AGDI Drivers, ULink, JLink, ST-Link, NuLink, JTAGjet

    AGDI Drivers

    AGDI is an Application Program Interface (API) third-party developers can use to create hardware debugger drivers that interface directly with the Keil µVision Debugger. The purpose of AGDI is to provide a way to interface the Keil Debugger user-interface to a third-party's hardware debugging interface.

    AGDI drivers are DLLs that are created using Microsoft Visual C++ and template files provided by Keil.

    For further information please download Appnote 173 for ARM-based target systems or Appnote 145 for 8051 and C166 based systems.

    AGDI drivers can interface to:

    • Emulators.
    • JTAG Debug Interfaces.
    • OCDS (on-chip debugging system) Interfaces.
    • Target Monitors.
    • Any other target debugging hardware.
    #define _EXPO_ __declspec(dllexport)
    extern _EXPO_ U32 AG_Init (U16 nCode, void *vp);
    extern _EXPO_ U32 AG_MemAtt (U16 nCode, UL32 nAttr, GADR *pA);
    extern _EXPO_ U32 AG_BpInfo (U16 nCode, void *vp);
    extern _EXPO_ AG_BP *AG_BreakFunc (U16 nCode, U16 n1, GADR *pA, AG_BP *pB);
    extern _EXPO_ U32 AG_HistFunc (U32 nCode, I32 indx, I32 dir, void *vp); 
    extern _EXPO_ U32 AG_GoStep (U16 nCode, U32 nSteps, GADR *pA);
    extern _EXPO_ U32 AG_Serial (U16 nCode, U32 nSerNo, U32 nMany, void *vp);
    extern _EXPO_ U32 AG_MemAcc (U16 nCode, UC8 *pB, GADR *pA, UL32 nMany);
    extern _EXPO_ U32 AG_RegAcc (U16 nCode, U32 nReg, GVAL *pV);
    extern _EXPO_ U32 AG_AllReg (U16 nCode, void *pR); 

    AGDI Interface Functions

    All functions that start with AG_ need to be defined in the target driver DLL. If a function executes correctly, the value 0 is returned to µVision, otherwise an error code should be returned. Note that the following exported functions must be defined, either fully functional or just as dummies:

    FunctionDescription
    AG_Init() AGDI Initialize function.
    AG_MemAtt() Memory Attribute access function.
    AG_BpInfo() Breakpoint Set / Reset / Enable / Disable / Kill function.
    AG_BreakFunc() Breakpoint access function.
    AG_GoStep() Go / Step / Stop commands.
    AG_Serial() Read / Write a Serial Window function.
    AG_MemAcc() Access target memory function.
    AG_RegAcc() Read / Write a single Register function.
    AG_AllReg() Read / Write Registers function.
    AG_HistFunc() Trace History access function.

    If this is not the case, µVision considers the target driver as invalid and cancels using it.

    AGDI Callbacks

    AGDI can borrow some of the functionality from µVision. This can be done by using the pCbFunc callback pointer, a function code and the appropriate parameters. Note that only the most important callback functions are described here. The additional ones can be found in AGDI.H near the end of the file. 

    typedef U32 (*pCBF) (U32 nCode, void *vp);
    #define AG_CB_TRUEXPR         1   // vp := 'EXP *' (use for Bp->ep)
    #define AG_CB_PROGRESS        2   // vp := 'struct PgRess *'
    #define AG_CB_INITREGV        3   // vp := 'REGDSC *' (into RegView)
    #define AG_CB_EXECCMD         4   // vp := 'char *' command string
    #define AG_CB_FORCEUPDATE     5   // vp := NULL, force general windows update
    #define AG_CB_DISASM          6   // vp := 'DAAS *', disasm opcodes
    #define AG_CB_INLASM          7   // vp := 'DAAS *', assemble szB[] into Opc[]
    #define AG_CB_MSGSTRING       8   // vp := 'char *' text for message pane
    #define AG_CB_GETDEVINFO      9   // vp := 'DEV_X66 *', get device info
    #define AG_CB_SYMBYVAL       10   // vp := 'SYMDESC *', find symbol by value
    #define AG_CB_SYMBYNAME      11   // vp := 'SYMDESC *', find symbol by name
    #define AG_CB_SLE66MM        12   // vp := &slots[0] out of [512]
    #define AG_CB_PHYS2MMU       13   // vp := (void *) ((DWORD) physAdr)
    #define AG_CB_MMU2PHYS       14   // vp := (void *) ((DWORD) logicalAdr)
    #define AG_CB_GETFLASHPARAM  15   // vp := (FLASHPARM *) or NULL
    #define AG_CB_GETBOMPTR      16   // vp := &ioc  /5.3.2003/
    
                                      // Note: special callback for DTC-Messaging
    #define AG_CB_DCTMSG_WRITE   17   // vp := write-access address
    
    #define AG_CB_DISASM_EXT     18   // vp := 'DAS_MIXED *', disasm to file
    #define AG_CB_LAREC_DATA     19   // vp := 'AGDI_LAREC *', send data-record to Logic-Analyzer
    #define AG_CB_SHUTDOWN       20   //
    #define AG_CB_GETSCOPEINFO   21   // vp := 'AG_SCOPE *', get Scope Info
    #define AG_CB_ENUMFUNCTIONS  22   // vp := 'AG_BLOCK *'. enumerate App/Modules/Functions
    Keil   ULINK, ULINK2, ULINK Pro --  UL2ARM.DLL, UM2CM3.DLL, ULP2ARM.DLL, ULP2CM3.DLL
    
    TI   LMIDK-AGDI -- LMIDK-AGDI.DLL
    
    Nuvoton   NuLink -- Nu_Link.dll
    
    ST  ST-LINK -- ST-LINKIII-KEIL_SWO.dll
    
    SiLabs  UDA -- SLAB_ADI.dll, SLAB_ADI_Util.dll, SLAB_CM_Keil.dll
    
    Signum JTAGjet -- SigUV3Arm.dll
    
    PEMicro Pemicro_ArmCortexInterface.dll
    
    Segger  JLINK -- JLTAgdi.dll, JL2CM3.dll  
    TDRV0=BINUL2ARM.DLL("ULINK2/ME ARM Debugger")
    TDRV1=BINUL2CM3.DLL("ULINK2/ME Cortex Debugger")
    TDRV2=BINABLSTCM.dll("Altera Blaster Cortex Debugger")
    TDRV3=BINlmidk-agdi.dll("Stellaris ICDI")
    TDRV4=SignumSigUV3Arm.dll("Signum Systems JTAGjet")
    TDRV5=SeggerJLTAgdi.dll("J-LINK / J-TRACE ARM")
    TDRV6=SeggerJL2CM3.dll("J-LINK / J-TRACE Cortex")
    TDRV7=BINULP2CM3.DLL("ULINK Pro Cortex Debugger")
    TDRV8=BINULP2ARM.DLL("ULINK Pro ARM Debugger")
    TDRV9=NULinkNu_Link.dll("NULink Debugger")
    TDRV10=SiLabsSLAB_CM_Keil.dll("SiLabs UDA Debugger")
    TDRV11=STLinkST-LINKIII-KEIL_SWO.dll ("ST-Link Debugger")
    TDRV12=BINCMSIS_AGDI.dll("CMSIS-DAP Debugger")
    TDRV13=BINDbgFM.DLL("Fast Models Debugger")
    TDRV14=PEMicroPemicro_ArmCortexInterface.dll("PEMicro Debugger")

    // Import Functions from JLINLARM.dll ==========================================
    // KeilARMSeggerJLTAgdi.dll
    // KeilARMSeggerJL2CM3.dll
    //
    // Functions for DLL
    //
    JLINKARM_GetDLLVersion
    JLINKARM_GetCompileDateTime
    JLINKARM_OpenEx
    JLINKARM_Close
    JLINKARM_HasError
    JLINKARM_EnableLog
    JLINKARM_SetLogFile
    JLINKARM_SetErrorOutHandler
    JLINKARM_SetWarnOutHandler
    // JL2CM3
    JLINKARM_IsOpen
    JLINKARM_GetDebugInfo
    //
    // Functions for DLL, JLINK, MCU
    //
    JLINKARM_ExecCommand
    //
    // Functions for JLINK
    //
    JLINKARM_GetSN
    JLINKARM_GetEmuCaps
    JLINKARM_GetOEMString
    JLINKARM_GetFeatureString
    JLINKARM_GetFirmwareString
    JLINKARM_GetHardwareVersion
    //
    // Functions for JLINK
    //
    JLINKARM_SetResetType
    JLINKARM_GetSpeedInfo
    JLINKARM_GetSpeed
    JLINKARM_SetSpeed
    JLINKARM_EnableSoftBPs
    // JL2CM3
    JLINKARM_SetEndian
    JLINKARM_SelectIP
    JLINKARM_SelectUSB
    JLINKARM_TIF_GetAvailable
    JLINKARM_TIF_Select
    JLINKARM_JTAG_SyncBits
    JLINKARM_JTAG_StoreRaw
    JLINKARM_EMU_SelectIP
    JLINKARM_EMU_GetList
    JLINKARM_EMU_SelectByUSBSN
    //
    // Functions for JLINK
    //
    JLINKARM_GetHWStatus
    JLINKARM_GetScanLen
    JLINKARM_GetId
    JLINKARM_GetIdData
    JLINKARM_JTAG_GetDeviceId
    JLINKARM_GetDeviceFamily
    // JL2CM3
    JLINKARM_JTAG_GetDeviceInfo

    //
    // Functions for MCU Run
    //
    JLINKARM_Reset
    JLINKARM_Step
    JLINKARM_Go
    JLINKARM_Halt
    JLINKARM_IsHalted
    // JL2CM3
    JLINKARM_SetRESET
    JLINKARM_ClrRESET
    //
    // Functions for MCU Watchpoint
    //
    JLINKARM_GetNumWPs
    JLINKARM_SetWP
    JLINKARM_ClrWP
    //
    // Functions for MCU Breakpoint
    //
    JLINKARM_GetNumBPUnits
    JLINKARM_SetBPEx
    JLINKARM_ClrBPEx
    //
    // Functions for MCU ETM
    //
    JLINKARM_ETM_IsPresent
    JLINKARM_ETM_ReadReg
    JLINKARM_ETM_WriteReg
    //
    // Functions for MCU Trace
    //
    JLINKARM_TRACE_Control
    JLINKARM_TRACE_Read
    // JL2CM3
    JLINKARM_RAWTRACE_Control
    JLINKARM_RAWTRACE_Read
    JLINKARM_SWO_Control
    JLINKARM_SWO_Read
    //
    // Functions for MCU Register and Memory
    //
    JLINKARM_ReadMem
    JLINKARM_WriteMem
    JLINKARM_ReadReg
    JLINKARM_WriteReg
    // JL2CM3
    JLINKARM_WriteU8
    JLINKARM_WriteU16
    JLINKARM_WriteU32
    JLINKARM_ReadMemU8
    JLINKARM_ReadMemU16
    JLINKARM_ReadMemU32

  • 相关阅读:
    git本地分支管理
    SpringMVC的第一个入门案例
    原来热加载如此简单,手动写一个 Java 热加载吧
    Spring Boot2 系列教程(十七)SpringBoot 整合 Swagger2
    SpringBoot 开发案例之参数传递的正确姿势
    MENU Java 中的 final、finally、finalize 有什么不同?
    Java Web 学习(1) —— Servlet
    Spring 基础知识学习
    SpringBoot中如何灵活的实现接口数据的加解密功能?
    Java中常用的四种线程池
  • 原文地址:https://www.cnblogs.com/shangdawei/p/3979141.html
Copyright © 2011-2022 走看看