parameters: (self, address, words)
return_statement: return self.datalink.ld_ptr_inc16(words)
docstring: Reads a number of words of data from UPDI
          :param address: address to write to
          :param words: number of words to read
docstring_summary: Reads a number of words of data from UPDI
          :param address: address to write to
          :param words: number of words to read
docstring_tokens: Reads a number of words of data from UPDI : param address : address to write to : param words : number of words to read
function: def read_data_words(self, address, words):
          """
          Reads a number of words of data from UPDI
          :param address: address to write to
          :param words: number of words to read
          """
          self.logger.debug("Reading %d words from 0x%04X", words, address)
  
          # Range check
          if words > constants.UPDI_MAX_REPEAT_SIZE:
              raise PymcuprogError("Cant read that many words in one go")
  
          # special case for single word - so we can optimize ld_ptr_inc16 for >1 word to improve performance.
          if words == 1:
              return self.datalink.ld16(self,address)
  
          # Otherwise, store the address
          self.datalink.st_ptr(address)
  
          # For performance, managing repeat count is done in ld_ptr_inc16()
          return self.datalink.ld_ptr_inc16(words)
function_tokens: def read_data_words ( self , address , words ) : self . logger . debug ( "Reading %d words from 0x%04X" , words , address ) # Range check if words > constants . UPDI_MAX_REPEAT_SIZE : raise PymcuprogError ( "Cant read that many words in one go" ) # special case for single word - so we can optimize ld_ptr_inc16 for >1 word to improve performance. if words == 1 : return self . datalink . ld16 ( self , address ) # Otherwise, store the address self . datalink . st_ptr ( address ) # For performance, managing repeat count is done in ld_ptr_inc16() return self . datalink . ld_ptr_inc16 ( words )