1. Intro
pclock2 is Prototype Clocking code for the IRSG controller.
Code is located in /home/s2/src/pclock2 on the IRTF network.
These files can be compile into pclock(Linux Host) and sgir's uboot.
ircommand.c/.h - commands for plcock or sgir uboot.
ir.c/.h - ir support functions ( CE support, Seq Table).
al.c/.h - aladdin support functions.
h2.c/.h - h2rg support functions
Other pclock file are linux specific:
plcock.c - appplication main file. Does the command execution.
common.c/.h - provides common or utility-type C functions.
2. Integrating into uboot
The code for ircommand, ir, al, h2 can be execute via the sgir uboot. How?
1. soft link needed source files. And add to Makefile
cd gpc/src-ppc405/u-boot/daq3u_apps
ln -s /home/s2/src/pclock2/ircommand.h
ln -s /home/s2/src/pclock2/ircommand.c
ln -s /home/s2/src/pclock2/ir.h
ln -s /home/s2/src/pclock2/ir.c
ln -s /home/s2/src/pclock2/al.h
ln -s /home/s2/src/pclock2/al.c
vi Makefile
add: DAQ3U_APPS += ircommand ir al # Added by TonyD
2. add command to the commandline interface code.
cd gpc/src-ppc405/u-boot/common/
vi cli_comlist.c
1. Add prototypes, ie: extern Function t1;
2. Add entries to cmd_table[] , ie: {"t1", t1, "test1"}
3. How thing work
ircommand.c/h hold the commands and data structure required for clocking.
Most command just set parameters, ie:
cbmode
coadds
darray
(you can view the list of commands in cli_comlist.c)
Data structure & function in ircommand.c:
struct ir_param_t Ip; /* parameter */
struct ir_ce_buf_t /* a buffer to hold CE commands */
{
int n; /* number of cmd[] entries */
int64_t nsec; /* total time in ns to execute table */
unsigned int *cmd; /* CE commands buffer */
};
struct ir_ce_buf_t CE_sam; /* to clock out & sample = How to clock out the device. */
struct ir_ce_buf_t CE_reset; /* to clock out & reset */
struct ir_seq_t Seq; /* Sequence Table = How to use CE_sam/reset to create an image */
A demo best illustrates how thing would work:
cd /home/s2/src/pclock2
pclock
show
ndr 2
go
1. create all data for CE_sam, CE_reset, Seq.
ir.c - provide function support generation of CE commands.
- provide function to build Seq data (struct ir_seq_t Seq).
al.c - uses ir.c function to build aladdin clocking tables (struct ir_ce_buf_t).
h2.g - uses h2.c function to build H2RG clocking tables.
2. put all data to CE FIFO.
Show a sample of the output on logic analzyer screen:
http://irtfweb.ifa.hawaii.edu/~s2/software/loaner_notes/ce_adc_diagram_1.png
Illustrate how to clock the aladdin array:
http://irtfweb.ifa.hawaii.edu/~s2/software/Controller_SGIR/Aladdin_clocks_illustration.pdf
3. What to do next?
1. When clocking obtain data and put into DRAM.
Setup of the Math Eng.
Servicing the OCM.
2. When DRAM has a full image, transfer to linux host.
I think at the last meeting we talked about transfering each NDR.
(vs coadd all NDR & Coadd into a single DRAM buffer, and transfering a single image after the GO).
Thinking the linux host needs to monitor grasp_receiver stream, then starts a
transfer when data buffer is full.
3. monitor sock to 'stop' ... implement stop command to abort go_app()?
Support for streaming mode:
1. Also need to realloc a large array (8MB)if doing small subarray/streaming mode.
2. pack many NDR subarray into a large buffer.
3. transfer to linux host
4. Clocking/Sampling continues un-interrupted until user say 'stop'.