Microsoft Word - AN3259C

Similar documents
C/C++ - 文件IO

+00DE _01EN.book

untitled

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File

プログラムの設計と実現II

CC213

新・明解C言語入門編『索引』

C 1

bingdian001.com

ICD ICD ICD ICD ICD


目录

C

51 C 51 isp 10 C PCB C C C C KEIL

, 7, Windows,,,, : ,,,, ;,, ( CIP) /,,. : ;, ( 21 ) ISBN : -. TP CIP ( 2005) 1

海 南 冯 琳 峰 海 南 省 锅 炉 压 力 容 器 与 特 种 设 备 检 验 所 海 南 省 定 安 县 白 蒙 路 47 号 信 XC 内 蒙 古 冯 磊 赤 峰 市 特 种 设 备 检 验 所 内 蒙 古 赤 峰 市 红 山 区 八 里 铺 油 库 路

Abstract arm linux tool-chain root NET-Start! 2


威 福 髮 藝 店 桃 園 市 蘆 竹 區 中 山 里 福 祿 一 街 48 號 地 下 一 樓 50,000 獨 資 李 依 純 105/04/06 府 經 登 字 第 號 宏 品 餐 飲 桃 園 市 桃 園 區 信 光 里 民

ATMEL AT90S8515 AVR CPU AVR AVR AVR ATMEL RISC 32 8 r0 r X Y Z R0 R1 R2 R13 R14 R15 R16 R17 R26 R27 R28 R29 R30 R31 0x00 0x

C/C++程序设计 - 字符串与格式化输入/输出

untitled

概述

Microsoft Word - MSP430 Launchpad 指导书.docx

Microsoft Word - 三峽鎮衛生所_3_-張家宸.李永繁.doc

Microsoft Word - 武漢大學交流營心得_黃莉云_.doc

上海相关企业名单

untitled

文件

行业

CSA SONET/SDH GR 253-CORE ITU-T G.703 ANSI T Ethernet IEEE Std ANSI X Fibre Channel Optical Fibre Channel Electrical U

int *p int a 0x00C7 0x00C7 0x00C int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++;

INCF SEC1,F ; 將 SEC1+1 作查表取回對應數字 MOVF SEC1,W banksel STRING1 banksel PORTB RETFIE run_sec2: MOVF SEC2,W SUBLW.5 GOTO run_min ; 將秒個位數歸 0 CLRF SEC1 MOVL

C/C++语言 - C/C++数据

<4D F736F F F696E74202D DA578C657B27BA6E6ABD8BF76B5B2BA63A475B57BAABABADEB27AA8EEABD7BB50A7EFB669ABD8C4B32DBDB2A7D3B4AD2E BACDBAE65BCD2A6A15D>

untitled

untitled

C语言的应用.PDF

Microsoft Word - report 4.doc

强迫症毁灭天才

1406.indd

上图专刊2006-3AAA.doc

衡山靈學創始人 超越時代的靈學明師 許衡山 老師 許衡山老師 出生於西元 1942 年 於 1980 年代啟發先天眼竅 自證其道 了悟真理 許 老師首先發現 人人皆可開發出第三眼能力與靈性能量 並藉由系統化的研究 將種種 生命現象與宇宙真理做深入淺出的剖析 並為生命的最終意義指出一條明路 現代文明昌

슬로시티번역,더빙 등 보고서(중문)_두현.hwp


?



EP.pdf

第53期内页.cdr

untitled

C C C The Most Beautiful Language and Most Dangerous Language in the Programming World! C 2 C C C 4 C Project 30 C Project 3 60 Project 40

Microsoft Word - Sable User's Manual.doc

行业

6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit

Microsoft Word - ~ doc

CC213

1.ai

ebook15-C

杭师大党字〔2011〕15号中共杭州师范大学委员会关于进一步加强和改进发展党员工作的意见

<4D F736F F D A67EAF64BEC7BCFABEC7AAF7C2B2B3B95FA5FEB3A1AAA95F2D31312E31362E646F63>

得 依 法 召 集 股 東 臨 時 會 第 十 一 條 : 股 東 常 會 之 召 集 應 於 開 會 三 十 日 前, 股 東 臨 時 會 之 召 集 應 於 開 會 十 五 日 前, 將 開 會 日 期 地 點 及 召 集 事 由 通 知 各 股 東 並 公 告 之 第 十 二 條 : 本 公

同 時, 那 些 百 萬 富 翁 們 正 乘 坐 着 私 家 噴 射 機 駛 往 歐 洲, 甘 願 花 大 把 的 鈔 票 接 受 替 代 療 法 並 且 重 獲 了 健 康 替 代 療 法 總 是 很 靈 嗎? 不, 當 然 不 是 在 這 世 界 上 没 有 盡 善 盡 美 的 事 物 但 是

<4D F736F F D B2C431A6B8A4A4A4DFA8C6B0C8B77CC4B3ACF6BFFD E646F63>

untitled

高校发展动态

FY.DOC

Outline USB Application Requirements Variable Definition Communications Code for VB Code for Keil C Practice

The golden pins of the PCI card can be oxidized after months or years

行业

行业

epub 33-8

(Load Project) (Save Project) (OffLine Mode) (Help) Intel Hex Motor

audiogram3 Owners Manual

嵌入式Linux块设备驱动开发解析

Microsoft Word - 正文.doc

ARM学习报告003——Bios源码分析.doc

MATLAB 1

(Guangzhou) AIT Co, Ltd V 110V [ ]! 2

内 容 简 介...1 关 於 操 作 手 册...1 CatEye V3n 之 正 确 使 用...3 自 动 辨 识 速 度 感 应 器 ID...4 码 表 及 其 零 件 说 明...5 码 表...5 配 件...5 萤 幕 显 示...6 如 何 将 码 表 及 配 件 安 装 在 自

MUGI Ver Copyright c 2001, 2002 Hitachi, Ltd. All rights reserved. 1

第一章 §1 1

X 广 州 澳 希 亚 实 业 有 限 公 司 广 州 市 荔 湾 区 国 家 税 务 局 第 二 税 务 分 局 广 州 市 运 输 有 限 公 司 广 州 市 荔 湾 区 国 家 税 务 局 第 二 税 务 分

D 江 苏 汉 邦 建 设 集 团 有 限 公 司 江 苏 邦 实 建 设 工 程 有 限 公 司

nooog

_汪_文前新ok[3.1].doc

( CIP) /. :, ( ) ISBN TP CIP ( 2005) : : : : * : : 174 ( A ) : : ( 023) : ( 023)

我 覺 得 流 病 的 各 單 元 之 間 常 常 都 有 相 連 的 觀 念, 中 間 要 是 有 觀 念 不 清 楚, 後 面 的 東 西 有 時 會 比 較 接 不 上 來 重 要 的 解 釋 名 詞 都 有 要 好 好 背, 容 易 考 的 申 論 題 要 整 理 成 筆 記 4. 衛 生

JTAG ICE PC JTAG ICE JTAG ISP... 5 IDE AVR STUDIO JTAGICE JTAGICE... 12

ROP_bamboofox.key

JLX

Important Notice SUNPLUS TECHNOLOGY CO. reserves the right to change this documentation without prior notice. Information provided by SUNPLUS TECHNOLO

Untitiled

系统架构 - 模块划分 功能 状态机 H265 主要的模块 : 1. 顶层模块 H265ENC_top 包括 sys_ctrl,enc_core 及 fetch 三个模块 2. sys_ctrl 就是一个状态机, 控制 fetch 和 enc_core 中各子模块的工作 3. enc_core 编码

AL-M200 Series

C C

untitled

untitled

安 全 须 知 使 用 前, 请 先 阅 读 安 全 须 知 危 险 - 为 了 降 低 触 电 的 危 险 : 在 您 使 用 后 ; 清 洁 机 器 时 ; 进 行 本 说 明 书 中 提 到 的 任 何 用 户 维 护 保 养 操 作 时 ; 或 当 缝 纫 机 无 人 看 管 时, 请 务

Transcription:

www.maxim-ic.com.cn 应用笔记 3259 DS31256 Envoy - 寄存器转储列程 概述本应用笔记提供了将 DS31256 的寄存器 排队程序 描述符和 FIFO RAM 的内容转储到一个文件的程序代码 这些数据在 DS31256 无法正常工作时非常关键, 为进一步的研究和调试提供了重要信息 例如, 寄存器数据经过转储后可以显示每个 DS31256 寄存器的设置 为了保证正确地设置器件, 首先需要检查配置 出现任何问题时, 支持组都将提出这项请求 有时, 只需简单地检查一下配置寄存器即可解决问题 该应用笔记仅仅罗列了可能发生问题的公共区域, 寄存器内容的转储文件提供了有关寄存器配置 排队程序 描述符和 FIFO RAM 的信息 执行寄存器转储之前, 需要做出一些假设 软件中需要以下功能函数 1. write_reg (addr, data) -- 将特定数据写入指定的 DS31256 寄存器 addr = DS31256 寄存器与芯片基础地址的偏差 data = 需要写入寄存器的数据 2. read_reg (addr) -- 在指定地址读取 DS31256 寄存器并返回数据 addr = DS31256 寄存器与芯片基础地址的偏差 3. read_ind_reg (addr, i) -- 在指定地址读取 DS31256 间接寄存器并返回数据 addr = DS31256 寄存器与芯片基础地址的偏差 i = 索引 4. 标准 C 函数 :printf fopen fprintf 和 fclose 5. 一些数据结构被用来在排队程序和描述符中保持数据 1. 将 DS31256 寄存器的数据转储到一个指定文件的程序代码 void dumpregs (char *filename) int addr, i, port; FILE *fptr; /* Open specified file for register dump */ fptr = fopen (filename, "w"); 1 of 9

if (fptr == NULL) printf ("Can't open the file\n"); /* Dump the contents of registers by category to the specified file */ fprintf (fptr, " Dump of DS31256 Registers\n"); fprintf (fptr, " General Config Registers\n"); fprintf (fptr, "MRID:\t %.4x\n", read_reg(0x0)); fprintf (fptr, "MC: \t %.4x\n", read_reg(0x10); fprintf (fptr, "SM: \t %.4x\n", read_reg(0x20); fprintf (fptr, "ISM: \t %.4x\n", read_reg(0x24); fprintf (fptr, "SDMA: \t %.4x\n", read_reg(0x28); fprintf (fptr, "ISDMA: \t %.4x\n ", read_reg(0x2c); fprintf (fptr,"\tsv54:\t %.4x\n", read_reg(0, 0x30); fprintf (fptr,"isv54: \t %.4x\n", read_reg(0x34) ; fprintf (fptr,"lbbmc: \t %.4x\n ", read_reg(0x40); fprintf (fptr,"test: \t %.4x\n", read_reg(0x50); fprintf (fptr,"receive Port Registers \n"); for (i = 0, addr = 0x100; addr <= 0x13c; addr += 4, i++) fprintf (fptr,"rp %d CR: \t %.4x\n", i, read_reg(addr)); if ((i & 3) == 3) fprintf (fptr, "Transmit Port Registers \n"); for (i = 0, addr = 0x200; addr <= 0x23c; addr += 4, i++) fprintf (fptr,"tp%d CR:\t %.4x", i, read_reg( addr)); if ((i & 3) == 3) for (port = 0, addr = 0x300; port < 16; port++, addr += 8) fprintf (fptr, "Channelized Port Registers, Port %d \n", port); for (i = 0; i < 128; i++) fprintf (fptr,"c%d DAT%d : \t %.4x", port, i, read_ind_reg(addr, i)); fprintf (fptr, "R%dCFG%d : \t %.4x", port, i,read_ind_reg(addr, i 0x100)); fprintf (fptr, "T%dCFG%d: \t %.4x", port, i, read_ind_reg(addr, i 0x200)); printf (fptr, "\n"); 2 of 9

fprintf (fptr, "HDLC Registers \n"); fprintf (fptr, "RHPL: \t %.4x\n", read_reg(0x410)); for (i = 0; i < 256; i++) fprintf (fptr,"rhcd%d : \t %.4x", i, read_ind_reg (0x400, i)); fprintf (fptr,"thcd%d : \t %.4x", i, read_ind_reg (0x480, i)); fprintf (fptr, "BERT Registers\n"); fprintf (fptr, "BERTC0 : \t %.4x", read_reg(0x500)); fprintf (fptr, "BERTC1 : \t %.4x", read_reg(0x504)); fprintf (fptr, "BERTRP0 : \t %.4x", read_reg(0x508)); fprintf (fptr, "BERTRP1 : \t %.4x \n", read_reg(0x50c)); fprintf (fptr,"bertbc0 : \t %.4x \n", read_reg(0x510)); fprintf (fptr,"bertbc1 : \t %.4x \n", read_reg(0x514)); fprintf (fptr,"bertec0 : \t %.4x \n", read_reg(0x518)); fprintf (fptr,"bertec1 : \t %.4x \n", read_reg(0x51c)); fprintf (fptr,"receive DMA Registers \n"); fprintf (fptr,"rfqba0 : \t %.4x", read_reg(0x700)); fprintf (fptr,"rfqba1 : \t %.4x", read_reg(0x704)); fprintf (fptr,"rfqea : \t %.4x", read_reg(0x708)); fprintf (fptr,"rfqsbsa : \t %.4x \n", read_reg(0x70c)); fprintf (fptr,"rfqlbwp : \t %.4x", read_reg(0x710)); fprintf (fptr,"rfqsbwp : \t %.4x", read_reg(0x714)); fprintf (fptr,"rfqlbrp : \t %.4x", read_reg(0x718)); fprintf (fptr,"rfqsbrp : \t %.4x", read_reg(0x71c)); fprintf (fptr,"rdqba0 : \t %.4x", read_reg(0x730)); fprintf (fptr,"rdqba1 : \t %.4x", read_reg(0x734)); fprintf (fptr,"rdqea : \t %.4x", read_reg(0x738)); fprintf (fptr,"rdqrp : \t %.4x \n", read_reg(0x73c)); fprintf (fptr,"rdqwp : \t %.4x", read_reg(0x740)); fprintf (fptr,"rdqfft : \t %.4x", read_reg(0x744)); fprintf (fptr,"rdba0 : \t %.4x", read_reg(0x750)); fprintf (fptr,"rdba1 : \t %.4x \n", read_reg(0x754)); fprintf (fptr,"rdmaq : \t %.4x", read_reg(0x780)); fprintf (fptr,"rlbs : \t" %.4x", read_reg(0x790); fprintf (fptr,"rsbs : \t" %.4x \n", read_reg(0x794)); fprintf (fptr,"receive DMA Channel Configuration \n"); for (i = 0; i < 256; i++) fprintf (fptr,"channel %d : \t ", i); fprintf (fptr, "%.4x", read_ind_reg (0x770, 0x100 + i)); 3 of 9

fprintf (fptr, "%.4x \t", read_ind_reg (0x770, 0x000 + i)); fprintf (fptr, "%.4x", read_ind_reg (0x770, 0x300 + i)); fprintf (fptr, "%.4x \t", read_ind_reg (0x770, 0x200 + i)); fprintf (fptr, "%.4x", read_ind_reg (0x770, 0x500 + i)); fprintf (fptr, "%.4x \n", read_ind_reg ( 0x770, 0x400 + i)); fprintf (fptr, "Transmit DMA Registers \n"); fprintf (fptr, "TPQBA0 : \t %.4x", read_reg(0x800)); fprintf (fptr, "TPQBA1 : \t %.4x", read_reg(0x804)); fprintf (fptr, "TPQEA : \t %.4x", read_reg(0x808)); fprintf (fptr, "TPQWP : \t %.4x", read_reg(0x80c)); fprintf (fptr, "TPQRP : \t %.4x \n", read_reg(0x810)); fprintf (fptr, "TDQBA0 : \t %.4x", read_reg(0x830)); fprintf (fptr, "TDQBA1 : \t %.4x", read_reg(0x834)); fprintf (fptr, "TDQEA : \t %.4x", read_reg(0x838)); fprintf (fptr, "TDQWP : \t %.4x", read_reg(0x83c)); fprintf (fptr, "TDQRP : \t %.4x \n", read_reg(0x840)); fprintf (fptr,"tdqfft : \t %.4x", read_reg(0x844)); fprintf (fptr,"tdba0 : \t %.4x", read_reg(0x850)); fprintf (fptr, "TDBA1 : \t %.4x", read_reg(0x854)); fprintf (fptr, "TDMAQ : \t %.4x \n", read_reg(0x880)); fprintf (fptr, "Transmit DMA Channel Configuration \n"); for (i = 0; i < 256; i++) fprintf (fptr, "Channel %d : \t", i); fprintf (fptr, "%.4x", read_ind_reg(0x870, 0x100 + i)); fprintf (fptr, "%.4x \t", read_ind_reg(0x870, 0x000 + i)); fprintf (fptr, "%.4x", read_ind_reg(0x870, 0x300 + i)); fprintf (fptr, "%.4x \t", read_ind_reg(0x870, 0x200 + i)); fprintf (fptr, "%.4x", read_ind_reg(0x870, 0x500 + i)); fprintf (fptr, "%.4x \n", read_ind_reg(0x870, 0x400 + i)); fprintf (fptr, "%.4x", read_ind_reg(0x870, 0x700 + i)); fprintf (fptr, "%.4x \t", read_ind_reg(0x870, 0x600 + i)); fprintf (fptr, "%.4x", read_ind_reg(0x870, 0x900 + i)); fprintf (fptr, "%.4x \t", read_ind_reg(0x870, 0x800 + i)); fprintf (fptr, "%.4x", read_ind_reg(0x870, 0xb00 + i)); fprintf (fptr, "%.4x \n", read_ind_reg(0x870, 0xa00 + i)); 4 of 9

5 of 9 应用笔记 3259: 寄存器转储例程 (DS31256) 2. 将发送排队程序和描述符转储到一个指定文件的程序代码 有些结构用来存储尚未确定或已经执行的排队数据和描述符, 这些数据有助于检查已经生成和正确发送的数据 void dumptx(drvdev * dp, int32 filename, int32 channel, int32 desc2) FILE fptr; dmatxdoneqdesc doneq; /* structure of Transmit Done Queue */ dmatxdev tdma; /* structure of DMA TX subsystem of the device */ dmatxbufdesc tbd; /* structure of Transmit Buffer Descriptor */ dmapendqdesc * pendq; /* structure of Transmit Pending Queue*/ int i, a = 0; int32 dev = 0; int32 tdqrp, tdqwp; int32 tpqrp, tpqwp; tdma = &dp->txdma; /* Get the pointer from the device structure */ doneq = tdma->doneqstart; /* Transmit Done Queue Start Pointer */ pendq = tdma->pendqstart; /* Transmit Pending Queue Start Pointer */ /* Open the specified file for data dump */ fptr = fopen(filename, "w"); if (fptr == NULL) printf ("Can't open the file\n"); fprintf (fptr, "\ntx Buffer Descriptors : \n"); for(i=0; i<tdma->bufdesccnt; i++) tbd = &tdma->bufdesc[i]; fprintf (fptr,"%4x : %.8x %.8x %.8x %.8x\n", i, tbd->dataaddr, tbd->desc1, tbd->desc2, tbd->desc3); /* Check the transmit pending queue write and read pointer before print out the data */ tpqwp = read_reg (0x80c); tpqrp = read_reg (0x810); fprintf (fptr, "\ntransmit Pending Queues : \n"); fprintf (fptr, "Read Pointer: %.8x Write Pointer : %.8x\n",tpqrp,tpqwp); pendq = tdma->pendqstart; for(i = pendq; i <= tdma->pendqend; pendq++) fprintf (fptr, "%4x : %.8x\n", a, pendq->desc);

a++; if (pendq == tdma->pendqend) break; /* Check the transmit done queue write and read pointer before print out the data */ tdqwp = read_reg(0x840); tdqrp = read_reg(0x83c); fprintf (fptr, "\ntransmit Done Queue Descriptors : \n"); fprintf (fptr, "Read Pointer: %.8x Write Pointer : %.8x\n",tdqrp,tdqwp); a=0; doneq = tdma->doneqstart; for (i = doneq; i <= tdma->doneqend; doneq++) fprintf (fptr,"%4x : %.8x\n", a, doneq->desc); a++; if (doneq == tdma->doneqend) break; /* Close the file */ 3. 将接收 FIFO RAM 的内容转储到一个指定文件的程序代码 void dump_rx_fifo_rams(char *filename) unsigned long reg_val; unsigned long rftst1, rftst2, rftst3, rftst4, rftst5, rftst6; unsigned long ram_addr; unsigned long max_busy_cnt, busy_cnt; FILE *fptr; /* DS31256 RX FIFO test register addresses */ rftst1 = 0x09D0; rftst2 = 0x09D4; rftst3 = 0x09D8; rftst4 = 0x09DC; rftst5 = 0x09E0; rftst6 = 0x09E4; 6 of 9

max_busy_cnt = 10; printf ("Dumping RX FIFO RAM's to file %s\n\n", filename); /* Open specified file for RAM data dumping */ fptr = fopen(filename, "w"); /* Put chip in test mode */ write_reg(0x0050, 0x0001); /* Dump RX FIFO SBP RAM */ /* Will be covered by write configuration and read configuration RAM dumps below */ /* Dump RX FIFO BP RAM to file */ fprintf (fptr, "RX FIFO BP RAM\n"); for (ram_addr=0; ram_addr<1024; ram_addr++) write_reg(rftst1, (0x0400 + ram_addr) 0x4000); printf ("\n\nerror: Max busy cnt of %d on rftst1 - RX FIFO BP RAM\n", max_busy_cnt); fprintf (fptr, "%.3x\n", read_reg(rftst2) & 0x03ff); /* Dump RX FIFO HWM RAM to file */ fprintf (fptr, "RX FIFO HWM RAM\n"); for (ram_addr=0; ram_addr<256; ram_addr++) write_reg(rftst1, (0x0800 + ram_addr) 0x4000); printf ("\n\nerror: Max busy cnt of %d on rftst1 - RX FIFO HWM RAM\n", max_busy_cnt); fprintf (fptr, "%.3x\n", read_reg(rftst2) & 0x03ff); 7 of 9

/* Dump RX FIFO write configuration RAM to file */ fprintf (fptr, "RX FIFO Write Configuration RAM\n"); for (ram_addr=0; ram_addr<256; ram_addr++) write_reg(rftst1, (0x0c00 + ram_addr) 0x4000); printf ("\n\nerror: Max busy cnt of %d on rftst1 - RX FIFO WCFG RAM\n", max_busy_cnt); fprintf (fptr, "%.4x%.4x%.4x\n", read_reg(rftst4) & 0x3fff, read_reg(rftst3) & 0xffff, read_reg(rftst2) & 0xffff); /* Dump RX FIFO read configuration RAM to file */ fprintf (fptr, "RX FIFO Read Configuration RAM\n"); for (ram_addr=0; ram_addr<256; ram_addr++) write_reg(rftst1, (0x1000 + ram_addr) 0x4000); printf ("\n\nerror: Max busy cnt of %d on rftst1 - RX FIFO RCFG RAM\n", max_busy_cnt); fprintf (fptr, "%.1x%.4x%.4x\n", read_reg(rftst4) & 0x000f, read_reg(rftst3) & 0xffff, read_reg(rftst2) & 0xffff); /* Dump RX FIFO data RAM to file */ fprintf (fptr, "RX FIFO Data RAM\n"); for (ram_addr=0; ram_addr<2048; ram_addr++) 8 of 9

write_reg(rftst1, (0x2000 + ram_addr) 0x4000); printf ("\n\nerror: Max busy cnt of %d on rftst1 - RX FIFO DATA RAM\n", max_busy_cnt); fprintf (fptr, "%.3x%.4x%.4x%.4x%.4x\n", read_reg(rftst6) & 0x0fff, read_reg(rftst5) & 0xffff, read_reg(rftst4) & 0xffff, read_reg(rftst3) & 0xffff, read_reg(rftst2) & 0xffff ); /* Close output file */ /* take chip out of test mode */ write_reg(0x0050, 0x0000); 结论本应用笔记提供了将 DS31256 的寄存器 排队程序 描述符和 FIFO RAM 的内容转储到一个文件的软件 如需进一步了解有关 HDLC 控制器产品的信息, 请联络电信应用支持组 :Email 地址 : telecom.support@dalsemi.com (English only), 电话 :972-371-6555 (Dallas, TX, USA) 9 of 9