void test_datawatchpoint_TestCase_ReadByte_LDRB()
{
  uint32_t pc = 0 ;
  
  writeCoreRegister(CORE_REG_PC,0x080003F0);
  
  setDataWatchpoint_MatchingOneComparator(COMPARATOR_0,0x2000045C,WATCHPOINT_MASK_NOTHING,0x11223344,WATCHPOINT_BYTE,WATCHPOINT_READ);

  setCoreMode(CORE_DEBUG_MODE);

  pc = readCoreRegister(CORE_REG_PC);

  // TEST_ASSERT_EQUAL(0x080003FC,pc);
}
void xtest_datawatchpoint_TestCase_WriteWord_STR()
{
  uint32_t pc = 0 ;
  
  setDataWatchpoint_MatchingOneComparator(COMPARATOR_0,0x2000045C,WATCHPOINT_MASK_NOTHING,0x11223344,WATCHPOINT_WORD,WATCHPOINT_WRITE);

  writeCoreRegister(CORE_REG_PC,0x080008A0);
  setCoreMode(CORE_DEBUG_MODE);

  while(!hasDWTTrapDebugEventOccured());

  pc = readCoreRegister(CORE_REG_PC);

  // TEST_ASSERT_EQUAL(,pc);
}
void xtest_datawatchpoint_TestCase_ReadByte_LDR()
{
  uint32_t pc = 0 ;

  setDataWatchpoint_MatchingOneComparator(COMPARATOR_0,0x2000045C,WATCHPOINT_MASK_NOTHING,0x44,WATCHPOINT_BYTE,WATCHPOINT_READ);

  writeCoreRegister(CORE_REG_PC,0x080005F0);
  setCoreMode(CORE_DEBUG_MODE);

  while(!hasDWTTrapDebugEventOccured());

  pc = readCoreRegister(CORE_REG_PC);

  // TEST_ASSERT_EQUAL(,pc);
}
void test_setDataWatchpoint_MatchingOneComparator()
{
  uint32_t configData = 0 ;
  configData = (2 << 16) + (2 << 12) + (WATCHPOINT_WORD << 10) + (DATA_COMPARISON << 8) + WATCHPOINT_WRITE ;
  
  //Faking CSW to Byte Size
  cswDataSize = CSW_BYTE_SIZE ;

  //Enable Global enable for DWT
  emulateSwdRegisterWrite(TAR_REG,SWD_AP,4,0xE000EDFF);
  emulateSwdRegisterWrite(DRW_REG,SWD_AP,4,ENABLE_DWT_ITM <<24 );

  //Set CSW to Word Size
	emulateSwdRegisterWrite(SELECT_REG, SWD_DP, OK, SELECT_BANK0);
	emulateSwdRegisterWrite(CSW_REG, SWD_AP, OK, (CSW_DEFAULT_MASK | CSW_WORD_SIZE));
  
  //Disable matching comparator
	emulateSwdRegisterWrite(TAR_REG,SWD_AP,4,(uint32_t)(&DWT_COMP[2].FUNCTION));
	emulateSwdRegisterWrite(DRW_REG,SWD_AP,4,0);
  
  //Program matching comparator 
  emulateSwdRegisterWrite(TAR_REG,SWD_AP,4,(uint32_t)(&DWT_COMP[2].COMP));
	emulateSwdRegisterWrite(DRW_REG,SWD_AP,4,0xFFFFFFFF);
  
  //Program matching mask 
  emulateSwdRegisterWrite(TAR_REG,SWD_AP,4,(uint32_t)(&DWT_COMP[2].MASK));
	emulateSwdRegisterWrite(DRW_REG,SWD_AP,4,WATCHPOINT_MASK_BIT14_BIT0);
  
  //Disable comparator
  emulateSwdRegisterWrite(TAR_REG,SWD_AP,4,(uint32_t)(&DWT_COMP[1].FUNCTION));
	emulateSwdRegisterWrite(DRW_REG,SWD_AP,4,0);
  
  //Program comparator 
  emulateSwdRegisterWrite(TAR_REG,SWD_AP,4,(uint32_t)(&DWT_COMP[1].COMP));
	emulateSwdRegisterWrite(DRW_REG,SWD_AP,4,0xABCDEF12);
  
  //Program mask 
  emulateSwdRegisterWrite(TAR_REG,SWD_AP,4,(uint32_t)(&DWT_COMP[1].MASK));
	emulateSwdRegisterWrite(DRW_REG,SWD_AP,4,WATCHPOINT_MASK_NOTHING);
  
  //Program function
	emulateSwdRegisterWrite(TAR_REG,SWD_AP,4,(uint32_t)(&DWT_COMP[1].FUNCTION));
	emulateSwdRegisterWrite(DRW_REG,SWD_AP,4,configData);
  
  TEST_ASSERT_EQUAL(0,setDataWatchpoint_MatchingOneComparator(COMPARATOR_2,0xFFFFFFFF,WATCHPOINT_MASK_BIT14_BIT0,
                                                              0xABCDEF12,WATCHPOINT_WORD,WATCHPOINT_WRITE));
}