#include <stdio.h>
#include <stdbool.h>
#include <stdint.h>
static uint32_t data = 0xEDEDF0F0 ;
static void asic_spi_read_tx( uint32_t address, uint32_t * const read_data)
{
* read_data = data;
}
static void asic_spi_write_tx( uint32_t address, uint32_t new_data, bool read_now)
{
data = new_data;
data |= 16 ;
}
static bool read_modify_bits( uint32_t modify_mask, uint32_t new_bits)
{
bool success = true ;
uint32_t address = 0 ;
uint32_t read_data = 0 ;
asic_spi_read_tx( address, & read_data) ;
printf ( "initial read_data = %x\n " , read_data
) ; uint32_t new_data = read_data;
// Modify only masked bits
for ( uint32_t bit = 0 ; bit < 32 ; bit++ )
{
if ( ( modify_mask & ( 1 << bit) ) != 0 )
{
// Bit is masked
if ( ( new_bits & ( 1 << bit) ) != 0 )
{
// Bit should be set
new_data |= 1 << bit;
printf ( "Setting bit %u\n " , bit
) ; }
else
{
// Bit should be cleared
new_data &= ~( 1 << bit) ;
printf ( "Clearing bit %u\n " , bit
) ; }
}
}
// Write new bits
asic_spi_write_tx( address, new_data, true ) ;
// Read to verify bits were properly set/cleared
asic_spi_read_tx( address, & read_data) ;
// Verify bits were set
if ( ( read_data & modify_mask) != new_bits)
{
printf ( "read_data = %x\n " , read_data
) ; success = false ;
}
else
{
printf ( "read_data = %x\n " , read_data
) ; }
return success;
}
int main( void ) {
// your code goes here
const bool success = read_modify_bits( 0xFFFF , 0x0F0F ) ;
if ( success)
{
}
else
{
}
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRib29sLmg+CiNpbmNsdWRlIDxzdGRpbnQuaD4KCnN0YXRpYyB1aW50MzJfdCBkYXRhID0gMHhFREVERjBGMDsKCnN0YXRpYyB2b2lkIGFzaWNfc3BpX3JlYWRfdHgodWludDMyX3QgYWRkcmVzcywgdWludDMyX3QgKiBjb25zdCByZWFkX2RhdGEpCnsKCSpyZWFkX2RhdGEgPSBkYXRhOwp9CgpzdGF0aWMgdm9pZCBhc2ljX3NwaV93cml0ZV90eCh1aW50MzJfdCBhZGRyZXNzLCB1aW50MzJfdCBuZXdfZGF0YSwgYm9vbCByZWFkX25vdykKewoJZGF0YSA9IG5ld19kYXRhOwoJZGF0YSB8PSAxNjsKfQoKc3RhdGljIGJvb2wgcmVhZF9tb2RpZnlfYml0cyh1aW50MzJfdCBtb2RpZnlfbWFzaywgdWludDMyX3QgbmV3X2JpdHMpCnsKCWJvb2wgc3VjY2VzcyA9IHRydWU7Cgl1aW50MzJfdCBhZGRyZXNzID0gMDsKICAgIHVpbnQzMl90IHJlYWRfZGF0YSA9IDA7CiAgICBhc2ljX3NwaV9yZWFkX3R4KGFkZHJlc3MsICZyZWFkX2RhdGEpOwogICAgcHJpbnRmKCJpbml0aWFsIHJlYWRfZGF0YSA9ICV4XG4iLCByZWFkX2RhdGEpOwogICAgdWludDMyX3QgbmV3X2RhdGEgPSByZWFkX2RhdGE7CiAgICAvLyBNb2RpZnkgb25seSBtYXNrZWQgYml0cwogICAgZm9yICh1aW50MzJfdCBiaXQgPSAwOyBiaXQgPCAzMjsgYml0KyspCiAgICB7CiAgICAgICAgaWYgKChtb2RpZnlfbWFzayAmICgxIDw8IGJpdCkpICE9IDApCiAgICAgICAgewogICAgICAgICAgICAvLyBCaXQgaXMgbWFza2VkCiAgICAgICAgICAgIGlmICgobmV3X2JpdHMgJiAoMSA8PCBiaXQpKSAhPSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAvLyBCaXQgc2hvdWxkIGJlIHNldAogICAgICAgICAgICAgICAgbmV3X2RhdGEgfD0gMSA8PCBiaXQ7CiAgICAgICAgICAgICAgICBwcmludGYoIlNldHRpbmcgYml0ICV1XG4iLCBiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgLy8gQml0IHNob3VsZCBiZSBjbGVhcmVkCiAgICAgICAgICAgICAgICBuZXdfZGF0YSAmPSB+KDEgPDwgYml0KTsKICAgICAgICAgICAgICAgIHByaW50ZigiQ2xlYXJpbmcgYml0ICV1XG4iLCBiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgLy8gV3JpdGUgbmV3IGJpdHMKICAgIGFzaWNfc3BpX3dyaXRlX3R4KGFkZHJlc3MsIG5ld19kYXRhLCB0cnVlKTsKICAgIC8vIFJlYWQgdG8gdmVyaWZ5IGJpdHMgd2VyZSBwcm9wZXJseSBzZXQvY2xlYXJlZAogICAgYXNpY19zcGlfcmVhZF90eChhZGRyZXNzLCAmcmVhZF9kYXRhKTsKICAgIC8vIFZlcmlmeSBiaXRzIHdlcmUgc2V0CiAgICBpZiAoKHJlYWRfZGF0YSAmIG1vZGlmeV9tYXNrKSAhPSBuZXdfYml0cykKICAgIHsKICAgIAlwcmludGYoInJlYWRfZGF0YSA9ICV4XG4iLCByZWFkX2RhdGEpOwogICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgIAlwcmludGYoInJlYWRfZGF0YSA9ICV4XG4iLCByZWFkX2RhdGEpOwogICAgfQogICAgcmV0dXJuIHN1Y2Nlc3M7Cn0KCmludCBtYWluKHZvaWQpIHsKCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCWNvbnN0IGJvb2wgc3VjY2VzcyA9IHJlYWRfbW9kaWZ5X2JpdHMoMHhGRkZGLCAweDBGMEYpOwoJaWYgKHN1Y2Nlc3MpCgl7CgkJcHJpbnRmKCJTVUNDRVNTISIpOwoJfQoJZWxzZQoJewoJCXByaW50ZigiRkFJTFVSRSEiKTsKCX0KCglyZXR1cm4gMDsKfQo=