For RS-485 trigger output (or input), the differential pins used are DDISC2+ and DDISC2-. Not all of our products have (2) 485 differential pairs but those that do can use the first pair as a clock source (or sink) and the second pair as a trigger source (or sink).
With that being said, all that is required to use the 485 trigger is to (wire up correctly, VERY important! :-)) configure the Root PE register to prepare to generate the trigger and at the CDP (Common Data Packet) level, set the CDP Control Word for the desired event (for a BC, RT, or Monitor) to meet the requirements to generate the trigger. A good reference for where the applicable bits get set is the AltaCore and Alta API Quick Reference Guide and the AltaCore-1553 Spec-Users Manual.
These can be found here:
https://www.altadt.com/ReleaseDownloads/AltaCore-1553%20Spec-Users%20Manual.pdf
This is a code snippet to configure the Root PE (Protocol Engine) register to generate an RS-485 trigger:
printf(“Adjusting Root PE Control Reg for RS-485 Trigger Out…\n”);
/* This example may only apply to channel 1 depending on your card configuration */
status = ADT_L1_ReadDeviceMem32(DEVID, ADT_L1_1553_PE_ROOT_CSR, &rootPEcsr, 1);
/* OR-in the RS-485 Trigger Setting – Change from default of TTL */
rootPEcsr |= ADT_L1_1553_PECSR_RS485_TRIG_OUT;
status = ADT_L1_WriteDeviceMem32(DEVID, ADT_L1_1553_PE_ROOT_CSR, &rootPEcsr, 1);
if (status == ADT_SUCCESS) printf(“Success.\n”);
else printf(“FAILURE – Error = %d\n”, status);
The first part is now done.
Next, let’s say you are performing an RT simulation with the Alta card and you want to generate a trigger based on the completion of a particular RT/SA message.
For this part, you simply write to the CDP Control word the proper bit for meeting the conditions of the trigger:
/*CDP allocation part of the code*/
printf(“Allocating one CDP for RT1 RECEIVE SA1… . . . “);
status = ADT_L1_1553_RT_SA_CDPAllocate(DEVID, 1, 0, 1, 1);
if (status != ADT_SUCCESS)
printf(“RT_SA_CDPAllocate FAILURE – Error = %d\n”, status);
/*
* Enable trigger output on RX message complete (with or without error)
*/
status = ADT_L1_1553_RT_SA_CDPRead(DEVID, 1, 0, 1, 0, &myRtCdp);
if (status != ADT_SUCCESS)
printf(“RT_SA_CDPRead FAILURE – Error = %d\n”, status);
myRtCdp.CDPControlWord |= ADT_L1_1553_CDP_CONTROL_TRGOUTERR | ADT_L1_1553_CDP_CONTROL_INTNOERR;
status = ADT_L1_1553_RT_SA_CDPWrite(DEVID, 1, 0, 1, 0, &myRtCdp);
if (status != ADT_SUCCESS)
printf(“FAILURE WRITING RT CDP, Error = %d\n”, status);
That’s all there is to it for the 1553 condition-based trigger output.
To generate a trigger from within the execution loop of a program, one would use the following API function, described in the Alta API Users Manual:
ADT_L0_UINT32 ADT_L1_1553_ForceTrgOut (ADT_L0_UINT32 devID)
This function causes the channel to generate an output trigger.