Loading MicroEngine code

Tammo Spalink tspalink at CS.Princeton.EDU
Thu Jun 8 16:31:18 EDT 2000


I have been unsuccessfully trying to write to a UEngine UStore.  From
what I have read in both the paper docs and the example code, the code
below should write the instruction 0xD8100020 to the 0th UStore
location in UEngine 0 and end with the "result" variable having the
value 0xD8100020.  In practice (I have printing routines in my real
program) "result" is always zero.  Looking at the CSR for UEngine 0,
it is disabled and should be ready to go.

Am I missing some other bit that need to be set?  The documentation
seems to suggest that the reset state (which the UE is in at startup)
should be a good time to write to the UStore.

Tammo

-----
typedef unsigned int        uint32;

// The following I get from example code:
#define CTX_ENABLES (0x28)
#define USTORE_ADDR (0x0)
#define USTORE_DATA (0x4)

void csrWrite(uint32 baseAddr, uint32 offset, uint32 value) {
    *((volatile uint32 *)(baseAddr + offset)) = value;
}

int32 csrRead(uint32 baseAddr, uint32 offset) {
    return *((volatile uint32 *)(baseAddr + offset));
}

void __main(void) {
    uint32 CSR = 0xB0000000;    // Base address microengine 0
    uint32 CTXEnablesValue;     // Holds contents of CTX_ENABLES CSR state
    uint32 addr = 0x0;          // Where in the UStore to put code
    uint32 result;

    // Ensure the UEngines are disabled
    CTXEnablesValue = csrRead(CSR, CTX_ENABLES);
    csrWrite(CSR, CTX_ENABLES, CTXEnablesValue & 0xFFFFF0FF);
    
    addr |= 0x00000400;         // Set the address enable (ECS) bit

    csrWrite(CSR, USTORE_ADDR, addr);       // Set the target address
    csrWrite(CSR, USTORE_DATA, 0xD8100020); // Write an instruction
    result = csrRead(CSR, USTORE_DATA);

    // This is where I expect "result" to be 0xD8100020, however it is
    // always equal to 0 (zero).
    
    // Enable the UEngines again (including this one)
    csrWrite(CSR, CTX_ENABLES, CTXEnablesValue | (1 << (7 + ueng)));
}
-----



More information about the ixp1200 mailing list